2011-06-15 148 views
1

這是簡單的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 

不過,我想在這裏做的是讓這不包含「用戶ID」欄和「USER_ID」列中的所有表。我應該如何查詢?

P.S.使用不喜歡仍然會返回包含'userid'或'user_id'列的表,如果該表具有其他一些不同的列。

非常感謝。

你也可以用你的original查詢在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 

這兩個查詢:

回答

3

「這裏沒有列用戶名/ 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 

編輯您需要應該給出相同的計劃和表現

+0

非常感謝。他們都工作得很好。特別是使用EXCEPT。 – woodykiddy 2011-06-15 08:01:18

2
SELECT name from sys.tables 
WHERE name not in (
    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' 
) 
1

你可以把它包在一個子查詢

Select t2.Name 
From sys.tables t2 
Where t2.Name Not In 
(
    SELECT t.name 
    FROM sys.tables t 
    JOIN sys.columns c ON t.object_id = c.object_id 
    WHERE c.name LIKE 'userid' OR c.name LIKE 'user_id' 
) 
ORDER BY t2.name 
相關問題