2017-09-09 25 views
0

我有兩個相同列的表。 表A有ID, Name, Des, Status和 表B有ID, Name, Des, Status。 我想比較表B的任何字段的數據與表A,因爲相同的列ID除外。如何比較數據SQL Server中兩個表的任何字段?

enter image description here

如上相同的圖片,當B表FETCH數據,檢測ID ID001ID003不相同,相同的

IF (SELECT COUNT (SELECT * FROM TABLE A RIGHT JOIN TABLE B ON A.ID = B.ID) != 0) 
BEGIN 
    PRINT 'BLAH BLAH, NOT SAME' 
END 

如果你有想法或解決方案的想法我的腦海中的數據,分享給我,非常感謝。

+0

在編寫sql時,右連接往往是異常。 –

回答

1

您可以使用CHECKSUMBINARY_CHECKSUM

SELECT a.*, b.* 
FROM TableA a INNER JOIN TableB b ON b.ID = a.ID 
WHERE CHECKSUM(b.Name, b.Des, b.Status) <> CHECKSUM(a.Name, a.Des, a.Status) 

另請參閱this link。它應該比多個OR條件更快。

IF (SELECT COUNT(*)  
    FROM TableA a INNER JOIN TableB b ON b.ID = a.ID 
    WHERE BINARY_CHECKSUM(b.Name, b.Des, b.Status) 
     <> BINARY_CHECKSUM(a.Name, a.Des, a.Status) 
    >0 
PRINT 'Not the same.' 
0

因爲它是沒有太多明確你怎麼想顯示你的不同,這是一種方法:

SELECT A.ID, 
(CASE WHEN A.Name <> B.Name THEN 'Diff Name' ELSE '') NameCompare, 
(CASE WHEN A.Des <> B.Des THEN 'Diff Des' ELSE '') DESCompare, 
(CASE WHEN A.Status <> B.Status THEN 'Diff Status' ELSE '') StatusCompare 
FROM A 
INNER JOIN B 
ON A.ID = B.ID 
0

這是一個簡單的加入

要獲得所有不同的行,你可以說:

select a.*, b.* 
from TableA a inner join TableB b on b.ID = a.ID 
where b.Name <> a.Name or b.Des <> a.Des or b.Status <> a.Status