sql使用单个查询从多个表中计算记录

cjd*_*3SD 4 sql oracle

我有一个表格列表,例如:

mytableA
mytableB
mytableC
Run Code Online (Sandbox Code Playgroud)

这些表都有相同的列(时间戳)。

我可以单独计算每张桌子:

select count(*) from mytableA where timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000';
select count(*) from mytableB where timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000';
select count(*) from mytableC where timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000';
Run Code Online (Sandbox Code Playgroud)

如何将其合并到一个查询中?有没有简单的方法?

预期成绩:

MyTableName     MyCnt
-----------     -----
mytableA        121
mytableB        78
mytableC        2345
Run Code Online (Sandbox Code Playgroud)

COL*_*OLD 7

SELECT  (
    SELECT COUNT(*)
    FROM   table1
    ) AS tot1,
    (
    SELECT COUNT(*)
    FROM   table2
    ) AS tottab2,
    (
    SELECT COUNT(*)
    FROM   table3
    ) AS tottab3
Run Code Online (Sandbox Code Playgroud)


Flo*_*ita 4

您不能直接使用类似的查询来完成此操作where table in (myTableA, myTableB, etc) ,但您可以美化union all解决方案:

select MyTableName, count(*)
FROM(
  select 'myTableA' MyTableName, timestamp from mytableA 
  union all
  select 'myTableB', timestamp  from mytableB  
  union all
  select 'myTableA', timestamp  from mytableC  
)
WHERE timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000'
GROUP BY MyTableName;
Run Code Online (Sandbox Code Playgroud)