查询 INFORMATION_SCHEMA 个在 db1 中但不在 db2 中的字段

Query INFORMATION_SCHEMA fields that are in db1 and IS NOT in db2

我不知道我应该 post 这个问题还是 "Database Administrators"。

我有 2 个 mysql 数据库 db1 和 db2。他们有一些不同的表,比方说,db1 有 tbl_home 而 db2 没有。两者都有 tbl_city 但字段不同。

所以,我想知道 db1 有哪些表和字段,而 db2 没有。

我有这个问题:

SELECT CONCAT (TABLE_NAME,COLUMN_NAME) FROM COLUMNS WHERE CONCAT (TABLE_NAME,COLUMN_NAME) NOT IN
(SELECT CONCAT (TABLE_NAME,COLUMN_NAME)  FROM COLUMNS WHERE TABLE_SCHEMA ='db2')
AND  TABLE_SCHEMA ='db1'

想法是从 db1 创建一个串联的列表(表名+字段名),然后与 db2 的相同列表进行比较。它应该显示 db1 中 不是 db2 中的 的每一行。 出于某种原因,我没有错误,但它没有显示正确的结果。 我错过了什么?

您可以使用 LEFT JOIN:

SELECT db1.table_name, db1.column_name 
FROM
  information_schema.columns db1
  LEFT JOIN
  information_schema.columns db2
  ON
    db1.table_schema='db1' AND db2.table_schema='db2'
    AND db1.table_name = db2.table_name
WHERE
  db2.table_schema IS NULL
ORDER BY
  db1.table_name

如果你想要一个逗号分隔的列表,你可以使用GROUP_CONCAT:

SELECT db1.table_name, GROUP_CONCAT(db1.column_name)
FROM ... same as above ...
WHERE
  db2.table_schema IS NULL
GROUP BY
  db1.table_name
ORDER BY
  db1.table_name