我想只找到一个表中存在的记录,这些记录不存在于另一个表中。我挣扎的部分是一个项目可以有多种变化。
示例表1
ItemNumber | VendorName
1 | Frito Lay
1 | Joe's Chips
1 | Chips Galore
示例表二
Item Number | Vendor Name
1 | Frito Lay
1 | Joe's Chips
我希望仅返回表2中不存在的表中存在的记录。这些表在模式btw中是相同的。
我想回来的记录是 1,Chips Galore
我正在使用SQL Server 2008.
答案 0 :(得分:2)
您可以使用NOT EXISTS
:
SELECT *
FROM dbo.TableOne T1
WHERE NOT EXISTS(SELECT 1 FROM dbo.TableTwo
WHERE ItemNumber = T1.ItemNumber
AND VendorName = T1.VendorName);
另一种选择可能是使用EXCEPT
:
SELECT *
FROM dbo.TableOne
EXCEPT
SELECT *
FROM dbo.TableTwo;
答案 1 :(得分:1)
那么你想从第一张桌子中退回Chip的Galore吗?
SELECT * FROM [Table One]
LEFT JOIN [Table Two] ON [Table One].[Item Number] = [Table Two].[Item Number]
AND [Table One].[Vendor Name] = [Table Two].[Vendor Name]
WHERE [Table Two].[Vendor Name] IS NULL
或使用NOT EXISTS
SELECT *
FROM [Table One] Tab1
WHERE NOT EXISTS (
SELECT 1
FROM [Table Two] Tab2
WHERE Tab1.[Item Number] = Tab2.[Item Number]
AND Tab1.[Vendor Name] = Tab2.[Vendor Name] )
答案 2 :(得分:0)
SELECT ItemNumber, VendorName
from Table1
except select ItemNumber, VendorName
from Table2
这将选择“第一个”集中的所有内容,这些内容在“第二个”集合中也找不到...并且它会检查每个行列中的每个指定列。 (删除重复项。)