我希望在表列表上运行此查询。

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/

10-11 05:50