我有一个相当基本的搜索功能,允许用户使用各种连接搜索各个领域的公司。部分原因涉及公司地址,这是一对多的关系。其中一个地址标记为公司总部。查询可能如下所示:
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的公司首先出现?
答案 0 :(得分:0)
尝试使用左连接而不是自然连接。理想情况下,结果应该是所有公司和客户,即company_address.city_id ='5556614'。因此除此之外你不应该获得任何其他数据。
答案 1 :(得分:0)
我想你想添加这个order by
子句:
order by max(company_addresses.IsHeadquarters = 'Y') desc;
无论识别总部的逻辑是什么。
我建议你在max(company_addresses.IsHeadquarters = 'Y')
条款中加入相同的表达式(select
),以便识别总部位于城市的公司。