【问题标题】:Count(*) Multiple TablesCount(*) 多个表
【发布时间】:2011-12-25 15:43:59
【问题描述】:

我正在浏览从多个表中获取计数的解决方案,我遇到了以下答案:

SELECT COUNT(*),(SELECT COUNT(*) FROM table2) FROM table1

它工作得很好,但我似乎无法让它只用于 2 张桌子。我目前的代码如下:

SELECT COUNT(*), 
(SELECT COUNT(*) FROM TABLE1),
(SELECT COUNT(*) FROM TABLE2),
(SELECT COUNT(*) FROM TABLE3),
(SELECT COUNT(*) FROM TABLE4),
(SELECT COUNT(*) FROM TABLE5),
(SELECT COUNT(*) FROM TABLE6),
(SELECT COUNT(*) FROM TABLE7),
(SELECT COUNT(*) FROM TABLE8),
(SELECT COUNT(*) FROM TABLE9),
(SELECT COUNT(*) FROM TABLE10),
(SELECT COUNT(*) FROM TABLE11),
(SELECT COUNT(*) FROM TABLE12),
(SELECT COUNT(*) FROM TABLE13),
(SELECT COUNT(*) FROM TABLE14),
(SELECT COUNT(*) FROM TABLE15),
(SELECT COUNT(*) FROM TABLE16),
(SELECT COUNT(*) FROM TABLE17),
(SELECT COUNT(*) FROM TABLE18)
FROM TABLE19

但是,它只计算 TABLE1 和 TABLE19。我需要计算所有表(TABLE1-18)以及 TABLE19(希望使用类似于第一个示例的结构)。

【问题讨论】:

  • 您使用的是什么数据库和版本?
  • 我认为你在这里解决了错误的问题.. 为什么你需要做这个查询?
  • 必须有更有效的方法来完成这项任务。我会 +1 @MarkByers 问题。

标签: mysql sql count


【解决方案1】:

在 MySQL 上这有效:

select sum(total) from(
select count(*) as total from Table1 
union
select count(*) as total from Table2) as a;

【讨论】:

    【解决方案2】:

    如果您乐于接受结果为行而不是列,您可以随时使用 UNION:

    SELECT "table1", COUNT(*) FROM table1 UNION                         
    SELECT "table2", COUNT(*) FROM table2 UNION                         
    SELECT "table3", COUNT(*) FROM table3
    

    等等。

    【讨论】:

      【解决方案3】:

      根据这是哪个数据库,它可能会略有变化...

      对于 Oracle,请执行以下操作:

      Select (select count(*) from table1) as table1Count, 
             (select count(*) from table2) as table2Count
      from dual
      

      如果是 SQL Server,那么就不要使用 from dual。

      编辑:

      既然你提到你在 cmets 中使用 MySQL:

      Get record counts for all tables in MySQL database

      【讨论】:

      • 使用了链接中的解决方案。
      【解决方案4】:

      使用别名使列具有唯一的名称:

      SELECT 
          (SELECT COUNT(*) FROM TABLE1) AS count_table1,
          (SELECT COUNT(*) FROM TABLE2) AS count_table2,
          (SELECT COUNT(*) FROM TABLE3) AS count_table3,
          etc..
          (SELECT COUNT(*) FROM TABLE19) AS count_table19
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多