字段不匹配

时间:2013-07-31 21:15:42

标签: sql oracle11g

我在表1中每行有3个字段,我希望与表2中每行完全相同的字段进行比较

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

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

这怎么写?

2 个答案:

答案 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