2017-04-05 21 views
0

我有兩個表,一個叫做訂單,另一個是發票。我想知道是否有沒有發票的封閉式訂單。他們由id_order加入,所以我有這個。SQL在不同的表中選擇字段

select I.ID_Order,O.ID_order from Invoices I 
inner join Orders O on o.ID_Order = I.ID_Order 
where o.Status='x' 

如果在發票中找到o.iD_order,這意味着訂單已開具發票。 如果在發票中未找到o.id_order,則表示其未開具發票。

我想在select語句中獲得所有未開發票的訂單。

回答

0

方法一:

select * 
From Order 
Where ID_Order not in (Select ID_Order from Invoices) 

方法2:

select O.* 
from Orders O 
Left join 
Invoices I 
on o.ID_Order = I.ID_Order 
where I.ID_Order IS NULL 

方法3:

select * 
From Order as O 
Where Not Exists (Select ID_Order from Invoices as I Where I.ID_Order = O.ID_Order) 

粘到第一個,通常具有更好的性能。

+0

我是新來的SQL,我不知道我怎麼沒看到這個。它的工作,謝謝。 – taby

+0

不是問題xD @taby,如果您嘗試使用'join',只需更新兩個方法即可 – LONG