我正在尝试选择所有没有名为“唯一”的列的表。我可以选择使用它的所有表:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'unique'
AND TABLE_SCHEMA ='database';
有没有一种简单的方法来修改 SELECT 语句,以便列出所有没有该列的表?这似乎很简单,但我无法弄清楚,也无法在论坛上找到答案。
谢谢
我正在尝试选择所有没有名为“唯一”的列的表。我可以选择使用它的所有表:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'unique'
AND TABLE_SCHEMA ='database';
有没有一种简单的方法来修改 SELECT 语句,以便列出所有没有该列的表?这似乎很简单,但我无法弄清楚,也无法在论坛上找到答案。
谢谢
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'
如果服务器中仅存在一个数据库,则上述查询有效。如果没有,也会列出来自其他数据库的表。考虑这个从特定数据库中挑选表的简化版本。总而言之,这是一个很大的亮点!
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');
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')
一个简单的反转:
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');