0

'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」列がないすべてのテーブルを選択する必要があります。そして正直なところ、どこから始めればいいのかわからない...

ご協力いただきありがとうございます

4

1 に答える 1

2
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)
于 2012-12-03T15:49:28.277 に答える