好吧,我继续犯这个错误,现在已经尝试了很多不同的方法了几个小时。希望有人可以提供帮助。
我正在尝试查询INFORMATION_SCHEMA.Columns
以查找:
所有仅包含2列的表格
这两个列的名称都以“ID”
这是我的问题:
select table_name, count(column_name) as [Count]
from information_schema.columns
where column_name like '%id'
group by table_name
having count(column_name) = 2
但是,它没有返回正确的结果。您可以在自己的数据库上运行它(我相信很多数据库都有包含名称以ID
结尾的列的表)并自行查看。
有什么建议吗?
答案 0 :(得分:1)
您应该在LIKE
子句中进行HAVING
比较:
SELECT
table_name
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY table_name
HAVING
COUNT(CASE WHEN column_name LIKE '%id' THEN column_name END) = 2
AND count(CASE WHEN column_name NOT LIKE '%id' THEN column_name END) = 0
这样,只会返回那些包含两列的表,其中所述列应以'id'
结尾。
答案 1 :(得分:0)
您无法选择具有详细某些列的聚合函数,这些列在group by子句中没有。您可以在SQL 2005+中使用OVER()子句(窗口函数)。试试这个:
SELECT * FROM(
SELECT TABLE_NAME, COUNT(COLUMN_NAME) OVER() AS [Count]
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_catalog = 'Database_name' --Database name
AND COLUMN_NAME LIKE '%id') A
WHERE [Count] = 2