Sql-Server

NOT IN(連同連接)查詢

  • December 21, 2015

我有兩張桌子: PartOrderLine

Part (PartNum PK, PartDesc, Price)

OrderLine (OrderNum PK, PartNum PK, QtyOrdered)

我想找出沒有訂購的零件。我想我有一個好主意,但我可能會遺漏一些東西;我認為最有可能在語法上。請檢查:

select Part.PartNum
   ,OrderLine.OrderNum
from OrderLine
inner join Part on OrderLine.PartNum = Part.PartNum
where PartNum not in (
       select distinct (OrderNum)
       from OrderLine
       )

它是否正確?

如果您想要訂購的零件,則應以 開頭Part,而不是OrderLine。當您考慮套裝時,這是唯一可以想像得到您正在尋找的物品的套裝。Part 可以是訂購零件的超集,而 OrderLine 可以很容易地成為零件的子集

SELECT PartName
FROM Part
WHERE PartNum NOT IN (
       SELECT PartNum
       FROM OrderLine
       )

通常情況下,比較整數比字元串更有效,所以我更改了WHERE子句以查找 PartNums,而不是 PartNames。

引用自:https://dba.stackexchange.com/questions/124107