仅当所有列出的列都存在时才列出表 - MySQL
list the tables only if all the listed columns exists - MySQL
我已尝试使用以下查询来列出包含所列 4 列的表。但是它returns没有表。
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'moduleid'
AND COLUMN_NAME = 'userroleid'
AND COLUMN_NAME = 'sortorder'
AND COLUMN_NAME = 'setdefault'
AND TABLE_SCHEMA='db_name'
当我在 where 条件中只使用一列时,它 returns 表格。我需要知道包含所有 4 列的表格。
这可能不是最优雅的解决方案,但应该可行。
SELECT DISTINCT c1.TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS c1
JOIN INFORMATION_SCHEMA.COLUMNS c2 on c1.TABLE_NAME = c2.TABLE_NAME
JOIN INFORMATION_SCHEMA.COLUMNS c3 on c1.TABLE_NAME = c3.TABLE_NAME
JOIN INFORMATION_SCHEMA.COLUMNS c4 on c1.TABLE_NAME = c4.TABLE_NAME
WHERE c1.COLUMN_NAME = 'moduleid'
AND c2.COLUMN_NAME = 'userroleid'
AND c3.COLUMN_NAME = 'sortorder'
AND c4.COLUMN_NAME = 'setdefault'
AND c1.TABLE_SCHEMA='db_name'
如果您不想对每个附加列执行 1 个 JOIN
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('moduleid',
'userroleid',
'sortorder',
'setdefault')
AND TABLE_SCHEMA='db_name'
GROUP BY TABLE_NAME
HAVING COUNT(*) = 4
我已尝试使用以下查询来列出包含所列 4 列的表。但是它returns没有表。
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'moduleid'
AND COLUMN_NAME = 'userroleid'
AND COLUMN_NAME = 'sortorder'
AND COLUMN_NAME = 'setdefault'
AND TABLE_SCHEMA='db_name'
当我在 where 条件中只使用一列时,它 returns 表格。我需要知道包含所有 4 列的表格。
这可能不是最优雅的解决方案,但应该可行。
SELECT DISTINCT c1.TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS c1
JOIN INFORMATION_SCHEMA.COLUMNS c2 on c1.TABLE_NAME = c2.TABLE_NAME
JOIN INFORMATION_SCHEMA.COLUMNS c3 on c1.TABLE_NAME = c3.TABLE_NAME
JOIN INFORMATION_SCHEMA.COLUMNS c4 on c1.TABLE_NAME = c4.TABLE_NAME
WHERE c1.COLUMN_NAME = 'moduleid'
AND c2.COLUMN_NAME = 'userroleid'
AND c3.COLUMN_NAME = 'sortorder'
AND c4.COLUMN_NAME = 'setdefault'
AND c1.TABLE_SCHEMA='db_name'
如果您不想对每个附加列执行 1 个 JOIN
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('moduleid',
'userroleid',
'sortorder',
'setdefault')
AND TABLE_SCHEMA='db_name'
GROUP BY TABLE_NAME
HAVING COUNT(*) = 4