mysql - sql 找出2个数据库的差异表名
黄舟
黄舟 2017-04-17 14:42:20
[MySQL讨论组]

同一个数据库,本地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'
    )
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
PHP中文网

试试这个:

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 ~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号