【问题标题】:How to compare two tables and show every difference [closed]如何比较两个表并显示每个差异[关闭]
【发布时间】:2017-01-05 14:25:25
【问题描述】:

我有两张表,每列 1 列。我想比较这些列,看看它们是否相同。这两个表看起来像这样:

表一:

-----
| 1 |
-----
| 2 |
-----
| 3 |
-----
| 4 |    
-----
| 5 |
-----
| 6 |
-----
| 7 |
-----
| 8 |
-----
| 9 |
-----

表二:

----- <-- missing `1` in table 
| 2 |
----- <-- missing `3` in table 
| 4 |    
-----
| 5 |
-----
| 5.5 | <-- extra `5.5` in table 
-----
| 6 |
-----
| 8 | <-- this one isnt the same as the `7` in table one
-----
| 7 | <-- this one isnt the same as the `9` in table one
-----
| 9 |
-----

SQL 查询应该返回如下表:

-----------------
| Table1| Table2|
----- -----------
| 1     |       |
----- -----------
| 3     |       |
-----------------
|       | 5.5   |
-----------------
| 7     | 8     |
-----------------
| 8     | 7     |
-----------------

因此,如果一个值仅在其中 1 个表中,则它必须是 selected。另外,如果表二中前一个字符串之后的字符串与表一中前一个字符串之后的字符串不同,则需要为selected

【问题讨论】:

  • 你的意思是一个数据库中有2个表
  • SO 不是免费的编码或代码转换或调试或教程或图书馆查找服务

标签: mysql sql sql-server compare


【解决方案1】:

使用FULL OUTER JOIN

SELECT *
FROM   Table1 t1
       FULL OUTER JOIN Table2 t2
                    ON t1.col = t2.col
WHERE  t1.col IS NULL
        OR t2.col IS NULL 

如果您的 DBMS 不支持 FULL OUTER JOIN 那么

SELECT *
FROM   Table1 t1
       LEFT JOIN Table2 t2
                    ON t1.col = t2.col
WHERE  t2.col IS NULL
Union all
SELECT *
FROM   Table1 t1
       Right JOIN Table2 t2
                    ON t1.col = t2.col
WHERE  t1.col IS NULL

【讨论】:

  • 回答这些Do it all for me question只会鼓励更多这样的问题
  • @RiggsFolly - 但这至少对我来说是一个有趣的问题;)
  • @RiggsFolly 我不明白你的评论,意思是你不应该给出具体的答案而是解释而不举例?
  • @JotaPardo - 这意味着 OP 没有尝试解决您自己的问题。我们不应该通过写答案来鼓励这样的问题
  • @Prdp 感谢您的帮助,当我运行您的代码时,它没有发现两个表中有任何差异,而这两个表之间肯定存在差异。
【解决方案2】:

你需要的是全外连接

select *
from mytable1 a1
full outer join mytable2 a2
on a1.mycolumn = a2.mycolumn

要仅显示缺少的部分,请添加:

where a1.mycolumn is null
or a2.mycolumn is null

【讨论】:

  • 回答这些Do it all for me question只会鼓励更多这样的问题
  • @RiggsFolly 我不明白你的评论,意思是你不应该给出具体的答案而是解释而不举例?
猜你喜欢
  • 2013-09-28
  • 1970-01-01
  • 2015-08-10
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多