我有一个相当基本的搜索功能,允许用户搜索不同领域的公司,使用各种联接。其中一部分涉及公司地址,这是一对多关系。其中一个地址被标记为公司总部。查询可能如下所示:
SELECT comanies.*,customers.*
FROM _customers
NATURAL JOIN companies
NATURAL JOIN company_addresses
WHERE company_addresses.city_id = '5556614'
GROUP BY company_id如你所见,每家公司都必须在这个城市有一个地址才能匹配。不过,我也想先订购以这座城市为总部的公司。目前,所有地址都分组到一行中,因此不能使用总部列。
如何让总部位于cit_id = 5556614的公司最先出现?
发布于 2014-01-23 01:22:17
尝试使用左连接而不是自然连接。理想情况下,结果应该是company_address.city_id = '5556614‘的所有公司和客户。因此,除了这些,您不应该获得任何其他数据。
发布于 2014-01-23 01:22:42
我想你应该添加这个order by子句:
order by max(company_addresses.IsHeadquarters = 'Y') desc;或者任何识别总部的逻辑是什么。
我建议您在select子句中使用相同的表达式(max(company_addresses.IsHeadquarters = 'Y')),这样您就可以将公司与本市的总部联系起来。
https://stackoverflow.com/questions/21289492
复制相似问题