从表

时间:2017-07-12 19:28:06

标签: mysql sql database

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

SELECT Description,Code,count(*) as count
FROM table1
  group by Description,code
  having count(*) > 1

我将不得不在30多个不同的表上运行此查询,我想知道如果我可以更改from语句并只列出表名。

此外,是否有一些功能可以在单独的列中添加它来自的表的名称,以区分结果的来源?

提前致谢

2 个答案:

答案 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...

然后使用您的代码处理最终表。 将为您节省大量时间。

使用指定表名

的列进行编辑