我希望在表格列表上运行此查询。
SELECT Description,Code,count(*) as count
FROM table1
group by Description,code
having count(*) > 1
我将不得不在30多个不同的表上运行此查询,我想知道如果我可以更改from语句并只列出表名。
此外,是否有一些功能可以在单独的列中添加它来自的表的名称,以区分结果的来源?
提前致谢
答案 0 :(得分:1)
您可以使用UNION ALL将它放在一起。除非你需要一些动态表选择。
SELECT Description,Code,count(*) as count, 'table1' as tableNane
FROM table1
group by Description,code
having count(*) > 1
UNION ALL
SELECT Description,Code,count(*) as count, 'table2' as tableNane
FROM table2
group by Description,code
having count(*) > 1
...
Actualy我喜欢@Shubhradeep Majumdar版本。它将生成更简洁的代码。
SELECT Description,Code, Count(Code), tableName FROM (
SELECT Description,Code, 'table1' as tableName
FROM table1
UNION ALL
SELECT Description,Code, 'table2' as tableName
FROM table2
) tables
GROUP BY tableName, Description, Code
HAVING COUNT(Code) > 1
但可能会有一些问题。它是更优雅的代码,但实际上可能比第一个版本慢。问题是tableName在分组之前附加在每个记录上,而在我的第一个版本中,你对已处理的数据执行了这一操作。
答案 1 :(得分:1)
从@ Marek的回答中继续,您可以先将所有表格附加到union all
的表格中。
select *, 'tab1' as tabnm from tab1
union all
select *, 'tab2' as tabnm from tab2
union all
select *, 'tab3' as tabnm from tab3
-- and so on...
然后使用您的代码处理最终表。 将为您节省大量时间。
使用指定表名
的列进行编辑