sql 找出2个数据库的差异表名

发布于 2022-09-02 15:01:19 字数 740 浏览 15 评论 0

同一个数据库,本地51张表和远程49张表,有差异数据表。如何通过一条SQL来快速找出这些表的名字。

SQL:

USE performance_schema;
SELECT 
t1.OBJECT_SCHEMA,t1.OBJECT_NAME,
t2.OBJECT_SCHEMA,t2.OBJECT_NAME
FROM `table_io_waits_summary_by_table` t1 
RIGHT JOIN `table_io_waits_summary_by_table` t2  ON t1.OBJECT_NAME = t2.OBJECT_NAME
WHERE t1.OBJECT_SCHEMA='db1_local' AND t2.OBJECT_SCHEMA='db2_remote';

结果集只有49张,无法罗列出差异的表明。使用了 LEFT OUTER JOIN 还是一样。


验证是存在差异的:

SELECT OBJECT_NAME
FROM table_io_waits_summary_by_table 
WHERE OBJECT_SCHEMA='db1_local' 
    AND OBJECT_NAME NOT IN (
        SELECT OBJECT_NAME 
        FROM table_io_waits_summary_by_table 
        WHERE OBJECT_SCHEMA='db2_remote'
    )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

流绪微梦 2022-09-09 15:01:19

试试这个:

USE performance_schema;
SELECT t1.*
FROM `table_io_waits_summary_by_table` t1 
LEFT JOIN `table_io_waits_summary_by_table` t2  ON t1.OBJECT_NAME = t2.OBJECT_NAME AND t2.OBJECT_SCHEMA='db2_remote'
WHERE t1.OBJECT_SCHEMA='db1_local' 
    AND t2.OBJECT_NAME IS NULL;

其实你的第一个SQL只要将对t2的限制提到连接条件中就行了,将t2.OBJECT_SCHEMA='db2_remote'写在where条件里面RIGHT JOIN就变成了INNER JOIN ~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文