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

同一个数据库,本地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'
    )
阅读 3.9k
1 个回答

试试这个:

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 ~

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