【问题标题】:list the tables only if all the listed columns exists - MySQL仅当所有列出的列都存在时才列出表 - MySQL
【发布时间】:2016-10-19 06:53:17
【问题描述】:

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

【问题讨论】:

    标签: mysql information-schema


    【解决方案1】:

    这可能不是最优雅的解决方案,但它应该可以工作。

    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'
    

    【讨论】:

      【解决方案2】:

      如果您不想为每个附加列执行 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-02
        • 2014-01-26
        • 2016-10-19
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2021-01-16
        • 2019-09-16
        相关资源
        最近更新 更多