我在表 1 中每行有 3 个字段,我想将它们与表 2 中每行完全相同的字段进行比较
我一直在玩 NOT IN,但我没有任何运气。任何人都可以帮忙吗?
基本上我想查看两个表中字段 1、字段 2、字段 3 在表 2 中不匹配的所有记录
这要怎么写?
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
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