我在表1中每行有3个字段,我希望与表2中每行完全相同的字段进行比较
我一直在玩NOT IN,但我没有运气。有人可以帮忙吗?
基本上我想查看表2中字段1,字段2,字段3不匹配的两个表中的所有记录
这怎么写?
答案 0 :(得分:0)
SELECT *
FROM Table1 T1
FULL OUTER JOIN Table2 T2
ON T1.col1 = T2.col1
AND T1.col2 = T2.col2
AND T1.col3 = T2.col3
WHERE T1.col1 <> T2.col1
OR T1.col2 <> T2.col2
OR T1.col3 <> T2.col3
答案 1 :(得分:0)
jyparask的答案很接近,但是如果你的某些列可以为空并且where子句稍微偏离,它可能不起作用。在这种情况下,您需要将列合并到一个实际上不能包含的值,或者手动检查空值。
我将假设col1不可为空,cols 2和3为
SELECT *
FROM Table1 T1
FULL OUTER JOIN Table2 T2
ON T1.col1 = T2.col1
AND (T1.col2 = T2.col2 or (T1.col2 is null and T2.col2 is null))
AND (T1.col3 = T2.col3 or (T1.col3 is null and T2.col3 is null))
WHERE T1.col1 is null or T2.col1 is null # assuming col1 is not null
或者使用合并:
SELECT *
FROM Table1 T1
FULL OUTER JOIN Table2 T2
ON T1.col1 = T2.col1
AND COALESCE(T1.col2,-1) = COALESCE(T2.col2,-1)
AND COALESCE(T1.col3,-1) = COALESCE(T2.col3,-1)
WHERE T1.col1 is null or T2.col1 is null # assuming col1 is not null