我希望在表列表上运行此查询。
SELECT Description,Code,count(*) as count
FROM table1
group by Description,code
having count(*) > 1
我将不得不在30多个不同的表上运行这个查询,我想知道是否可以更改from语句并只列出表名。
此外,是否有一些功能可以将表的名称添加到单独的列中以区分结果的来源?
提前谢谢
最佳答案
你可以用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
...
实际上,我喜欢@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会附加在每个记录上,而在我的第一个版本中,您可以对已处理的数据执行此操作。
关于mysql - 从表列表中选择相同的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45066047/