MSI*_*SIS 4 join sql-server t-sql sql-server-2014
我有两张桌子: Part,OrderLine:
Part (PartNum PK, PartDesc, Price)
OrderLine (OrderNum PK, PartNum PK, QtyOrdered)
Run Code Online (Sandbox Code Playgroud)
我想找出未订购的零件。我想我有一个好主意,但我可能遗漏了一些东西;我认为最有可能在语法上。请检查:
select Part.PartNum
,OrderLine.OrderNum
from OrderLine
inner join Part on OrderLine.PartNum = Part.PartNum
where PartNum not in (
select distinct (OrderNum)
from OrderLine
)
Run Code Online (Sandbox Code Playgroud)
这样对吗?
如果您想要未订购的零件,那么您应该从 开始Part,而不是OrderLine。当您考虑套装时,可以想象只有它可以拥有您正在寻找的物品。零件可以是有序零件的超集,而 OrderLine 可以很容易地是零件的子集。
SELECT PartName
FROM Part
WHERE PartNum NOT IN (
SELECT PartNum
FROM OrderLine
)
Run Code Online (Sandbox Code Playgroud)
通常情况下,比较整数比字符串更有效,因此我更改了WHERE子句以查找 PartNums,而不是 PartNames。