sql - 返回不包含特定列的所有表的查询

标签 sql sql-server t-sql sql-server-2008

这是一个简单的 SQL 查询,它将返回具有以下列名称“userid”或“user_id”的所有表。

SELECT  t.name 
FROM sys.tables t
INNER JOIN sys.columns c ON t.object_id = c.object_id
WHERE c.name LIKE 'userid' OR c.name LIKE 'user_id'
ORDER BY name

但是,我在这里想做的是获取所有不包含“userid”列和“user_id”列的表。这个应该怎么查询呢?

附注如果表还有其他不同的列,使用 NOT LIKE 仍会返回包含“userid”或“user_id”列的表。

非常感谢。

最佳答案

您需要“不存在 userid/user_id 列的表”

SELECT
    t.name 
FROM 
    sys.tables t
WHERE
    NOT EXISTS (SELECT *
          FROM sys.columns c
          WHERE t.object_id = c.object_id AND c.name IN ('userid', 'user_id'))
ORDER BY
    t.name

编辑:

您还可以在 EXCEPT 子句中使用原始查询

SELECT t.name FROM sys.tables t
EXCEPT
SELECT t.name 
FROM sys.tables t
INNER JOIN sys.columns c ON t.object_id = c.object_id
WHERE c.name IN  ('userid', 'user_id')
ORDER BY t.name

这两个查询应该给出相同的计划和性能

关于sql - 返回不包含特定列的所有表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354565/

相关文章:

mysql - 组 SQL 2 表

sql - 什么保证 SQL 规范为 UPDATE 提供读取和写入某些列的内容

c# - 如何使用 C# 创建 SQL Server 2012 数据库?

SQL 将空行与非空行合并

sql - 帮助递归sql查询

mysql - 具有内连接、子选择和限制的 SQL 选择

MySQL : Group count specific column per user?

sql-server - 将包含超过 1024 列的 csv 文件导入到新的 SQL Server 表中

SQL Server - 从数据中删除结束字符串字符 "\0"

c# - 只获取几个结果集