0

我在表 1 中每行有 3 个字段,我想将它们与表 2 中每行完全相同的字段进行比较

我一直在玩 NOT IN,但我没有任何运气。任何人都可以帮忙吗?

基本上我想查看两个表中字段 1、字段 2、字段 3 在表 2 中不匹配的所有记录

这要怎么写?

4

2 回答 2

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
于 2013-07-31T21:21:03.113 回答
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
于 2013-07-31T21:48:40.873 回答