如何比较2个SQL表的区别

时间:2017-11-11 17:07:50

标签: sql distinct except

根据下表,我如何区分两个表,给出T143每行重复的事实:

T001.CODE             T143.CODE
----                   -----
A1                     A1
                       A1
A2                     A2
                       A2
A3             

A4                     A4
                       A4

结果应该是A3作为它在T001中的唯一存在 - 我还需要显示T143中的所有列。

这是我做得很远但在手动检查数据后出现错误:

SELECT CODE FROM T001 
EXCEPT 
SELECT CODE FROM T143

感谢

2 个答案:

答案 0 :(得分:0)

您始终可以使用exists执行此操作:

select t1.code
from t001 t1
where not exists (select 1 from t143 t2 where t2.code = t1.code);

如果您还想要t2中的列,请使用union all获取这些列。

如果您想在两个表中使用所有代码,只需执行以下操作:

select t1.code
from t001
union  -- on purpose for duplicate removal
select t2.code
from t143;

答案 1 :(得分:0)

全外连接应该可以解决这个问题

SELECT DISTINCT COALESCE(T001.CODE,T143.CODE), T143.*
FROM T001 FULL OUTER JOIN T143 
 ON T001.CODE = T143.CODE 
WHERE T001.CODE IS NULL OR T143.CODE IS NULL

编辑:由于标签中提到了DISTINCT,我将其添加到查询