【问题标题】:MySQL query to select table names by column namesMySQL查询按列名选择表名
【发布时间】:2012-12-03 15:46:21
【问题描述】:

我正在尝试从包含列“lang”和“project”的指定数据库中选择所有表。这就是我正在做的:

SELECT DISTINCT(ISC1.TABLE_NAME) AS `table` FROM INFORMATION_SCHEMA.COLUMNS AS ISC1 
JOIN INFORMATION_SCHEMA.COLUMNS AS ISC2 ON 
    (ISC1.TABLE_SCHEMA=ISC2.TABLE_SCHEMA AND ISC1.TABLE_NAME=ISC2.TABLE_NAME AND ISC2.COLUMN_NAME='project') 
WHERE ISC1.COLUMN_NAME='lang' AND ISC2.COLUMN_NAME='project' AND ISC1.TABLE_SCHEMA='some_database'
  • 它确实有效,但我觉得编写这种查询的方式很糟糕。如果有人可以改进它,那就太好了。
  • 现在我必须更改此查询以选择所有具有“lang”列但没有“project”列的表。老实说,我不知道从哪里开始......

感谢您的帮助

【问题讨论】:

    标签: mysql information-schema


    【解决方案1】:
    SELECT DISTINCT(ISC1.TABLE_NAME) AS `table`
    FROM INFORMATION_SCHEMA.COLUMNS AS ISC1,
        INFORMATION_SCHEMA.COLUMNS AS ISC2 
    WHERE ISC1.TABLE_SCHEMA=ISC2.TABLE_SCHEMA
    AND ISC1.TABLE_NAME=ISC2.TABLE_NAME
    AND ISC2.COLUMN_NAME='project'
    AND ISC1.COLUMN_NAME='lang'
    AND ISC1.TABLE_SCHEMA='some_database'
    

    没有项目栏:

    SELECT DISTINCT(ISC.TABLE_NAME) AS `table`
    FROM INFORMATION_SCHEMA.COLUMNS AS ISC
    WHERE ISC.COLUMN_NAME='lang'
    AND ISC.TABLE_SCHEMA='some_database'
    AND NOT EXISTS(SELECT *
        FROM INFORMATION_SCHEMA.COLUMNS C
        WHERE C.COLUMN_NAME = 'project'
        AND C.TABLE_NAME=ISC.TABLE_NAME
        AND C.TABLE_SCHEMA=ISC.TABLE_SCHEMA)
    

    【讨论】:

    • 谢谢你,我的朋友。一旦此操作可用,我将立即接受此答案。顺便说一句:在第二个查询中,ISC1 应更改为 ISC
    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多