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

时间:2010-10-04 23:28:27

标签: sql mysql join

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

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.id=Orders.Person_id

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

我正在使用mysql。

提前全部感谢。

4 个答案:

答案 0 :(得分: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;

左连接的结果始终包含“左”表(人员)的所有记录,即使连接条件未在“右”表(订单)中找到任何匹配记录。如果没有匹配项,则“右”表的列将在结果集中NULL

答案 1 :(得分:10)

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

select * from persons where person.id not in (select person_id from orders)

答案 2 :(得分:3)

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

select * from persons p 
where not exists
(select null from orders o where o.person_id = p.id)

答案 3 :(得分:0)

您可以使用左连接:

    SELECT DISTINCT o.CustomerID from Orders as o
    left join Customers as c
    on o.CustomerID=c.CustomerID