2016-03-01 8 views
0

我想只查找一個表中存在的記錄,這些記錄不存在於另一個表中。我正在努力的部分是,一個項目可以有多種變化。如何在每個記錄有變化時查找存在於一個表中但不是另一個的記錄

示例表一個

ItemNumber  | VendorName 
1    | Frito Lay 
1    | Joe's Chips 
1    | Chips Galore 

例表二

Item Number | Vendor Name 
1    | Frito Lay 
1    | Joe's Chips 

我期待回到只存在於一個表中不表存在兩個記錄。這些表在模式btw中是相同的。

我期待返回的記錄是 1,芯片嘉豪

我使用SQL Server 2008的

+0

Soooo,結果應該是'1,Chips Galore'? – Lamak

+0

在關係代數中,這被稱爲反連接。 –

回答

0
SELECT ItemNumber, VendorName 
from Table1 
except select ItemNumber, VendorName 
from Table2 

這將選擇「第一個」集合中沒有在「第二個」集合中找到的所有內容......並檢查每個行列中的每個指定列。 (刪除重複項)

1

那麼你想返回芯片的嘉豪出了第一臺?

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

您可以使用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; 
相關問題