Перечислять таблицы, только если все перечисленные столбцы существуют - MySQL
Я попробовал следующий запрос, чтобы перечислить таблицы, которые содержат перечисленные 4 столбца. Но он не возвращает таблиц.
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'
когда я использую только один столбец, в котором условие возвращает таблицы. Мне нужно знать таблицы, в которых есть все 4 столбца.
2 ответа
Решение
Возможно, это не самое элегантное решение, но оно должно работать.
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