2016-06-14 10 views
0

MySQLでは、特定のカラム名がまだ存在しないテーブルの名前を取得するためにどのようなクエリを使用しますか?私はいくつかのテーブルにはdeleted_atのカラムがあり、そうでないテーブルがあり、まだdeleted_atカラムを持たないテーブルの名前を持っているデータベースがあります。カラムが存在しないテーブルの名前を取得

混乱を避けるため、1つのテーブルからチェックしたくないので、そのカラムを持たないすべてのテーブルのリストが必要です。手伝ってくれてありがとう!

答えて

3

information_schemaはこの種のものに役立ちます。

SELECT t.table_name 
FROM INFORMATION_SCHEMA.TABLES AS t 
LEFT JOIN INFORMATION_SCHEMA.COLUMNS AS c 
    ON t.table_schema = c.table_schema 
    AND t.table_name = c.table_name 
    AND c.column_name = 'deleted_at' 
WHERE t.table_schema = 'my_schema' 
    AND c.table_name IS NULL 
ORDER BY t.table_name; 
1

次のような情報スキーマでそれを行うことができます:あなたする必要がある唯一のスキーマ(CC)

SELECT * FROM information_schema.Columns 
WHERE TABLE_NAME NOT IN (
    SELECT TABLE_NAME FROM information_schema.Columns 
    WHERE COLUMN_NAME = 'deleted_at' 
    AND TABLE_SCHEMA = 'cc' 
    GROUP BY TABLE_NAME 
) 
AND TABLE_SCHEMA = 'cc' 
GROUP BY TABLE_NAME; 

サンプル

MariaDB [cc]> SELECT * FROM information_schema.Columns 
    -> WHERE TABLE_NAME NOT IN (
    ->  SELECT TABLE_NAME FROM information_schema.Columns 
    ->  WHERE COLUMN_NAME = 'xid' 
    ->  AND TABLE_SCHEMA = 'cc' 
    ->  GROUP BY TABLE_NAME 
    -> ) 
    -> AND TABLE_SCHEMA = 'cc' 
    -> GROUP BY TABLE_NAME; 
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+----------------+------------------+------------+----------------+---------------------------------+----------------+ 
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | NUMERIC_PRECISION | NUMERIC_SCALE | DATETIME_PRECISION | CHARACTER_SET_NAME | COLLATION_NAME | COLUMN_TYPE  | COLUMN_KEY | EXTRA   | PRIVILEGES      | COLUMN_COMMENT | 
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+----------------+------------------+------------+----------------+---------------------------------+----------------+ 
| def   | cc   | first  | id   |    1 | NULL   | NO   | int  |      NULL |     NULL |    10 |    0 |    NULL | NULL    | NULL   | int(11) unsigned | PRI  | auto_increment | select,insert,update,references |    | 
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+----------------+------------------+------------+----------------+---------------------------------+----------------+ 
1 row in set (0.02 sec) 

MariaDB [cc]> 
+0

@Uueerdoあちこちソリューションを使用する - それははるかに明確でより良い –

関連する問題