当每个记录有变化时,如何查找存在于一个表中但不存在另一个表中的记录

时间:2016-03-01 19:08:40

标签: sql sql-server-2008

我想只找到一个表中存在的记录,这些记录不存在于另一个表中。我挣扎的部分是一个项目可以有多种变化。

示例表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.

3 个答案:

答案 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

这将选择“第一个”集中的所有内容,这些内容在“第二个”集合中也找不到...并且它会检查每个行列中的每个指定列。 (删除重复项。)