我定义了一个典型的Persons表和一个Orders表,这样我就可以执行如下的JOIN查询来返回所有Persons的Orders。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.id=Orders.Person_id
问题是,我如何编写一个语句来返回所有Person with NO Orders?我用的是mysql。提前感谢所有人。
gblwokeq1#
您可能需要使用LEFT JOIN和IS NULL:
LEFT JOIN
IS NULL
SELECT Persons.LastName, Persons.FirstName FROM Persons LEFT JOIN Orders ON Persons.id = Orders.Person_id WHERE Orders.Person_id IS NULL;
左联接的结果始终包含“左”表(Persons)的所有记录,即使联接条件在“右”表(Orders)中找不到任何匹配记录。如果没有匹配项,则“右”表的列在结果集中将为NULL。
NULL
yb3bgrhw2#
这应该行得通......有不止一种方法可以做到。
select * from persons where person.id not in (select person_id from orders)
7nbnzgx93#
为了完整起见,下面是not exists版本:
not exists
select * from persons p where not exists (select null from orders o where o.person_id = p.id)
1dkrff034#
您可以使用左连接:
SELECT DISTINCT o.CustomerID from Orders as o left join Customers as c on o.CustomerID=c.CustomerID
hyrbngr75#
问题查找从未下过订单的客户。输出客户的名字。数据两个表:客户和订单
SELECT first_name from customers WHERE first_name not in (select first_name from customers join orders on customers.id=orders.cust_id)
5条答案
按热度按时间gblwokeq1#
您可能需要使用
LEFT JOIN
和IS NULL
:左联接的结果始终包含“左”表(Persons)的所有记录,即使联接条件在“右”表(Orders)中找不到任何匹配记录。如果没有匹配项,则“右”表的列在结果集中将为
NULL
。yb3bgrhw2#
这应该行得通......有不止一种方法可以做到。
7nbnzgx93#
为了完整起见,下面是
not exists
版本:1dkrff034#
您可以使用左连接:
hyrbngr75#
问题查找从未下过订单的客户。输出客户的名字。数据两个表:客户和订单