2016-07-28 57 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运算符,您需要使用嵌套子查询,因为模糊匹配可能会为每个谓词返回多个列名称。 –

相关问题