SQL语句让所有客户无需订单

tim*_*eon 14 mysql sql join

我有一个典型的Persons表和Orders表定义,我可以按以下方式执行JOIN查询以返回所有人的订单.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.id=Orders.Person_id
Run Code Online (Sandbox Code Playgroud)

问题是,我如何撰写一份声明,返回所有没有订单的人?

我正在使用mysql.

提前全部感谢.

Dan*_*llo 23

您可能想要使用LEFT JOINIS NULL:

SELECT     Persons.LastName, Persons.FirstName
FROM       Persons
LEFT JOIN  Orders ON Persons.id = Orders.Person_id
WHERE      Orders.Person_id IS NULL;
Run Code Online (Sandbox Code Playgroud)

左连接的结果始终包含"左"表(人员)的所有记录,即使连接条件在"右"表(订单)中未找到任何匹配记录也是如此.当没有匹配时,"右"表的列将NULL在结果集中.


Dav*_*vid 12

这应该有效......不止一种方法.

select * from persons where person.id not in (select person_id from orders)
Run Code Online (Sandbox Code Playgroud)


小智 6

为了完整起见,这里是not exists版本:

select * from persons p 
where not exists
(select null from orders o where o.person_id = p.id)
Run Code Online (Sandbox Code Playgroud)