2017-11-11 87 views
0

下表给出的,我怎么能有2个表给该T143具有每行重复的事实之间的区别:如何比较2 SQL表差异

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

你能显示你当前得到的结果吗? –

+2

用您正在使用的数据库标记您的问题。 –

+0

如果你的结果应该是A3,你的查询似乎在PostgreSQL和SQLite3下都可以使用。 – tonypdmtr

回答

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; 
+0

他'还需要显示来自T143的所有列。' – Turo

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在标签中提到,我将它添加到查询中

+0

似乎正在工作,我用T001。*而不是T143。*为了显示所有列 - 它有意义吗? –

+0

这不是你说的问题,但如果它适合你的需求... – Turo