我想从MySQL数据库中选择一些Addresses
。 Addresses
可以具有Contact
,Organization
或两者都有。 (一个Contact
可以有多个Addresses
。一个Organization
也可以。)
假设我要获取所有Organization
的Addresses
。没什么大不了的。但是,如果我想按ORDER
Contact.last_name
怎么办?有些Addresses
没有Contact
。
我进行了一些实验,发现如果您ORDER BY contacts.last_name
,则仅返回具有Addresses
的那些Contact
。我尝试了ORDER BY contacts.last_name, addresses.street1
,但是仍然仅返回具有关联的Addresses
的Contact
。
是否有一个查询将按Addresses
查找Organization.id
,按Contact.last_name
排序结果,并包括所有Organization
的Addresses
,甚至没有Contact
的查询?
表结构
addresses
---------
id
contact_id
organization_id
street1
contacts
--------
id
last_name
organizations
-------------
id
name
解:
返回所有
Organization
的Addresses
:SELECT a.*
FROM addresses a
LEFT JOIN contacts c
ON a.contact_id = c.id
WHERE a.organization_id = '8283'
ORDER BY c.last_name
好的,上面的查询很好地解决了它。
最佳答案
问题可能出在联接而不是order-by子句上。一旦将Addresses
表与Contacts表联接,联接条件将消除具有NULL值的所有元组。
为避免这种情况,您必须使用OUTER JOIN
而不是INNER JOIN
(默认值)。 OUTER JOIN
背后的想法只是用NULL值扩展缺少的表行以进行处理/排序等。
关于sql - MySQL按关联列排序SELECT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1548921/