查询 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
我不知道我应该 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