我想从MySQL数据库中选择一些AddressesAddresses可以具有ContactOrganization或两者都有。 (一个Contact可以有多个Addresses。一个Organization也可以。)

假设我要获取所有OrganizationAddresses。没什么大不了的。但是,如果我想按ORDER Contact.last_name怎么办?有些Addresses没有Contact

我进行了一些实验,发现如果您ORDER BY contacts.last_name,则仅返回具有Addresses的那些Contact。我尝试了ORDER BY contacts.last_name, addresses.street1,但是仍然仅返回具有关联的AddressesContact

是否有一个查询将按Addresses查找Organization.id,按Contact.last_name排序结果,并包括所有OrganizationAddresses,甚至没有Contact的查询?



表结构

addresses
---------
id
contact_id
organization_id
street1

contacts
--------
id
last_name

organizations
-------------
id
name




解:

返回所有OrganizationAddresses

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/

10-09 09:02