MySQLで特定のカラムが存在しないテーブル名を特定する
「deleteDate」が無いテーブルを特定したかったが、苦戦したのでメモ
USE information_schema; SELECT temp1.table_name FROM ( SELECT DISTINCT table_name FROM columns WHERE table_schema = 'DB名' AND column_name != 'deleteDate' ) AS temp1 LEFT OUTER JOIN ( SELECT DISTINCT table_name FROM columns WHERE table_schema = 'DB名' AND column_name = 'deleteDate' ) AS temp2 ON temp1.table_name = temp2.table_name WHERE temp2.table_name IS NULL;
おまけ
テーブル一覧を取得する
SHOW TABLES FROM 'DB名'; -- または SELECT table_name, table_type, engine FROM information_schema.tables WHERE table_schema = 'DB名';
テーブルのカラム一覧を取得する
SHOW COLUMNS FROM 'テーブル名';
テーブル一覧とカラム一覧を取得する
USE information_schema; SELECT table_name, column_name FROM columns WHERE table_schema = 'DB名';