2016-06-14 49 views
0

在MySQL中,我使用什麼查詢來獲取給定列名不存在的表的名稱?我有一個數據庫,其中一些表有deleted_at列,有些則沒有,我想要有沒有deleted_at列的表的名稱。獲取不存在列的表的名稱

爲了避免混淆,我不想從一個表中檢查它是否存在,我想要一個沒有列的所有表的列表。感謝幫助!

回答

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的解決方案 - 它更清楚,更好 –