MySQL:比较两个表之间的差异

新手上路,请多包涵

oracle diff 相同:如何比较两个表? 除了在 mysql 中。

假设我有两个表,t1 和 t2,它们的布局相同,但可能包含不同的数据。

区分这两个表的最佳方法是什么?

更准确地说,我试图找出一个简单的 SQL 查询,它告诉我 t1 中一行的数据是否与 t2 中相应行的数据不同

看来我不能使用相交或减号。当我尝试

SELECT * FROM robot intersect SELECT * FROM tbd_robot

我得到一个错误代码:

[错误代码:1064,SQL 状态:42000] 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“SELECT * FROM tbd_robot”附近使用正确的语法

我在做一些语法错误吗?如果没有,我可以使用另一个查询吗?

编辑:另外,我正在通过免费版本的 DbVisualizer 进行查询。不确定这是否是一个因素。

原文由 echoblaze 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 974
2 个回答

INTERSECT 需要在 MySQL 中模拟:

 SELECT  'robot' AS `set`, r.*
FROM    robot r
WHERE   ROW(r.col1, r.col2, …) NOT IN
        (
        SELECT  col1, col2, ...
        FROM    tbd_robot
        )
UNION ALL
SELECT  'tbd_robot' AS `set`, t.*
FROM    tbd_robot t
WHERE   ROW(t.col1, t.col2, …) NOT IN
        (
        SELECT  col1, col2, ...
        FROM    robot
        )

原文由 Quassnoi 发布,翻译遵循 CC BY-SA 4.0 许可协议

我尝试了上面的答案,但发现如果一个表有空值,而第二个表的列中有值,那么上面的相交代码不会报告这个事实。

 select p.pcn,p.period,p.account_no,p.ytd_debit,a.ytd_debit
-- select count(*) -- 157,283
from Plex.account_period_balance p -- 157,283/202207,148,998
join Azure.account_period_balance a  -- 157,283/202207,148,998
on p.pcn = a.pcn
and p.period = a.period
and p.account_no = a.account_no -- 157,283
where p.period_display = a.period_display -- 157,283
and p.debit = a.debit  -- 157,283
-- and p.ytd_debit = a.ytd_debit -- 148,998
-- and p.ytd_debit != a.ytd_debit -- 0

原文由 brent groves 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题