我有一個典型的人員表和一個訂單表,這樣我可以做JOIN查詢,如下所示,爲所有人返回訂單。SQL語句讓所有客戶沒有訂單
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.id=Orders.Person_id
的問題是,我怎麼寫,將返回所有的人有沒有訂單的聲明?
我正在使用mysql。
謝謝一切提前。
我有一個典型的人員表和一個訂單表,這樣我可以做JOIN查詢,如下所示,爲所有人返回訂單。SQL語句讓所有客戶沒有訂單
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.id=Orders.Person_id
的問題是,我怎麼寫,將返回所有的人有沒有訂單的聲明?
我正在使用mysql。
謝謝一切提前。
您可能需要使用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;
左連接總是包含了「左」表(人)的所有記錄的結果,即使加盟條件沒有找到任何匹配「右側」表中的記錄(訂單)。如果不匹配,結果集中「右」表的列將爲NULL
。
這應該工作... theres不止一種方式來做到這一點。
select * from persons where person.id not in (select person_id from orders)
只是爲了完整性,這裏是not exists
版本:
select * from persons p
where not exists
(select null from orders o where o.person_id = p.id)
所有三個答案正如我所願。感謝大家。 – timeon 2010-10-05 19:40:12
這的確會工作,但可以成爲大型記錄集效率非常低,因爲它首先獲得所有的訂單,那麼它過濾與外部查詢。加入答案實際上是最好的方式。 – 2018-01-31 15:55:20