4

「一意」という名前の列を持たないすべてのテーブルを選択しようとしています。次を使用して、それを持つすべてのテーブルを選択できます。

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'unique'
AND TABLE_SCHEMA ='database';

その列を持たないすべてのテーブルをリストするように SELECT ステートメントを変更する簡単な方法はありますか? これは簡単なように思えますが、理解できず、フォーラムで答えを見つけることができません。

ありがとう

4

4 に答える 4

9
select
t.*
from INFORMATION_SCHEMA.TABLES as t
    left join INFORMATION_SCHEMA.COLUMNS as c
    on c.TABLE_NAME = t.TABLE_NAME
    and c.TABLE_SCHEMA = t.TABLE_SCHEMA
    and c.COLUMN_NAME = 'unique'
where c.COLUMN_NAME is null
and t.TABLE_SCHEMA = 'database'
于 2011-03-10T20:48:00.917 に答える
2

上記のクエリは、サーバーにデータベースが 1 つしか存在しない場合に機能します。そうでない場合は、他のデータベースのテーブルもリストされます。特定の DB からテーブルを選択するこの単純化されたバージョンを検討してください。全体として、これは素晴らしいハイライトです!

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'DATABASE_NAME' 
AND TABLE_NAME NOT IN (SELECT DISTINCT TABLE_NAME 
                            FROM INFORMATION_SCHEMA.COLUMNS 
                           WHERE COLUMN_NAME = 'FIELD_NAME' 
                             AND TABLE_SCHEMA ='DATABASE_NAME');
于 2012-03-02T15:39:05.173 に答える
0
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME NOT IN (
SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'unique'
AND TABLE_SCHEMA ='database')
于 2011-03-10T20:49:06.670 に答える
0

単純な反転:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME NOT IN

(SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'unique'
AND TABLE_SCHEMA ='database');
于 2011-03-10T20:49:20.360 に答える