2016-07-28 30 views
0

如何選擇其中有兩個或多個特定列的數據庫表?如何選擇其中有兩個或更多特定列的數據庫表?

這裏的一個顯示帶有CustomerName的表格。要添加另一列來尋找,看來我可能不得不在子查詢中添加另一個子查詢。

我正在尋找一個簡單的查詢,我可以在不增加複雜度的情況下添加x列數。

SELECT t.name AS table_name, 
SCHEMA_NAME(schema_id) AS schema_name, 
c.name AS column_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
WHERE t.name in (select t.name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID where c.name LIKE '%CustomerID%') 
ORDER BY schema_name, table_name; 

UPDATE
想使用LIKE操作

+0

你的意思是你想要一個包含所有指定列的表的列表,或者任何一個表? –

+0

指定的所有列 –

+0

@Dudi Konfino它不使用Like,你沒有在Chris的答案上添加任何額外的東西。 –

回答

0

假設你要包含所有你提供的列名的表,沒有子查詢一個簡單的方法可以是:

SELECT t.name AS table_name, 
     SCHEMA_NAME(t.schema_id) AS schema_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.object_id = c.object_id 
WHERE c.name IN('COL1', 'COL2') -- Column names in here 
GROUP BY t.name, SCHEMA_NAME(t.schema_id) 
HAVING COUNT(DISTINCT c.name) = 2 -- Match the count of columns in the IN criteria 
ORDER BY SCHEMA_NAME(t.schema_id), t.name; 
+0

它不起作用。我通過使用我知道存在於表中的兩列來嘗試它,並且查詢沒有返回任何內容。另外,我更喜歡使用LIKE運算符,因爲有時我不確定列名稱或者列名稱中存在不一致,例如:custid和customerid –

+0

適用於我,請嘗試以下腳本:https://gist.github.com/chrispickford/5c8f7079dc0b2253f1047bff628f5acc –

+0

要使用LIKE運算符,您需要使用嵌套子查詢,因爲模糊匹配可能會爲每個謂詞返回多個列名稱。 –

相關問題