仅当所有列出的列都存在时才列出表 - MySQL

时间:2016-06-17 12:22:59

标签: mysql information-schema

我尝试了以下查询来列出包含列出的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'

当我在where条件中只使用一列时它会返回表格。我需要知道包含所有4列的表。

2 个答案:

答案 0 :(得分:3)

这可能不是最优雅的解决方案,但应该可行。

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 :(得分:3)

如果您不想每增加一列执行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