【问题标题】:How to compare 2 SQL table for difference如何比较 2 个 SQL 表的差异
【发布时间】:2017-11-11 17:07:49
【问题描述】:

鉴于下表,鉴于 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

谢谢

【问题讨论】:

  • 你能显示你目前得到的结果吗?
  • 用您正在使用的数据库标记您的问题。
  • 如果您的结果应该是 A3,那么您的查询似乎在 PostgreSQL 和 SQLite3 下都有效。
  • 编辑您的问题并显示您想要的结果。

标签: sql distinct except


【解决方案1】:

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

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,我将其添加到查询中

【讨论】:

  • 似乎工作正常,我使用 T001.* 而不是 T143.* 来显示所有列 - 它有意义吗?
【解决方案2】:

您始终可以使用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;

【讨论】:

  • 他“还需要显示来自 T143 的所有列。”
猜你喜欢
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
相关资源
最近更新 更多