2016-05-03 62 views
0

我有兩個表。這兩個表可能有不匹配的ID。但是,它們也可能具有不匹配的名稱或地址。我需要能夠從我的列表中篩選出不僅ID,而且first_name,last_name和street_1。我可以對匹配ID進行加入,但有時它們會匹配,但其他列可能有不匹配的記錄,我需要顯示這些記錄。在SQL中顯示多個不匹配的記錄

查找不匹配的ID。如果他們匹配,看看是否有其他領域不匹配。

這裏是我期待的結果:

id first_name_2 last_name_2 street_1    street_2 
3 Teresa   White  834 Green Ridge Hill 43 Arapahoe Park 
6 Rebecca   George  39157 Nelson Hill  7467 Acker Center 
7 Ann    Hawkins  341 Tennessee Street 8 Bunting Street 
8 Joyce   Moreno  0277 Bunker Hill Drive 6 Nancy Center 
9 Kimberly  Alvarez  57332 Di Loreto Lane 0437 Waubesa Avenue 

ID 3 & 6是在列表中,因爲姓氏不匹配。 ID 7是姓氏和street_1。 ID 8 & 9 ID不匹配。

這裏是我的樣本數據以供參考:http://sqlfiddle.com#!9/928568/2

+0

的SQL小提琴使用MySQL,所以我刪除了SQL Server標記。 –

回答

1

我會做到以下幾點:左側的接合部和處理空值作爲空白字符串。如果你有一個合法的空字符串,street_2例如,它可能會返回誤報:

SELECT * 
FROM information I1 
    LEFT JOIN information_2 I2 ON I1.id = I2.id 
WHERE (I1.first_name_2 <> ifnull(I2.first_name_2, '') 
     OR I1.last_name_2 <> ifnull(I2.last_name_2, '') 
     OR I1.street_1 <> ifnull(I2.street_1, '') 
     OR I1.street_2 <> ifnull(I2.street_2, '') 
    ); 
0

我通過樣本數據參考去了,我覺得你的要求是要查找所有其精確副本的元組就在那裏不存在第二個表

您可以使用下面的SQL 代碼測試這對你feedle並且給出預期的結果

SELECT 
i.id, i.first_name_2, i.last_name_2, i.street_1, i.street_2 
FROM 
    information i 
LEFT JOIN 
information_2 i2 
ON 
i.id=i2.id AND i.first_name_2=i2.first_name_2 AND i.last_name_2=i2.last_name_2 
AND i.street_1=i2.street_1 AND i.street_2 = i2.street_2 
where 
i2.id is null 

還有一個簡單的方法來做到這一點,如果你的數據庫支持MINUS集合運算符只寫

SELECT * FROM information 
MINUS 
SELECT * FROM information_2 

,你會得到相同的答案

相關問題