MySQLでは、特定のカラム名がまだ存在しないテーブルの名前を取得するためにどのようなクエリを使用しますか?私はいくつかのテーブルにはdeleted_at
のカラムがあり、そうでないテーブルがあり、まだdeleted_at
カラムを持たないテーブルの名前を持っているデータベースがあります。カラムが存在しないテーブルの名前を取得
混乱を避けるため、1つのテーブルからチェックしたくないので、そのカラムを持たないすべてのテーブルのリストが必要です。手伝ってくれてありがとう!
MySQLでは、特定のカラム名がまだ存在しないテーブルの名前を取得するためにどのようなクエリを使用しますか?私はいくつかのテーブルにはdeleted_at
のカラムがあり、そうでないテーブルがあり、まだdeleted_at
カラムを持たないテーブルの名前を持っているデータベースがあります。カラムが存在しないテーブルの名前を取得
混乱を避けるため、1つのテーブルからチェックしたくないので、そのカラムを持たないすべてのテーブルのリストが必要です。手伝ってくれてありがとう!
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;
次のような情報スキーマでそれを行うことができます:あなたする必要がある唯一のスキーマ(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]>
@Uueerdoあちこちソリューションを使用する - それははるかに明確でより良い –