代码之家  ›  专栏  ›  技术社区  ›  bcmcfc

MySQL中多个表的COUNT(*)

  •  39
  • bcmcfc  · 技术社区  · 14 年前

    例如:

    SELECT COUNT(*) AS table1Count FROM table1 WHERE someCondition
    JOIN?? 
    SELECT COUNT(*) AS table2Count FROM table2 WHERE someCondition
    CROSS JOIN? subqueries?
    SELECT COUNT(*) AS table3Count FROM table3 WHERE someCondition
    

    编辑:

    我们的目标是回报:

    +-------------+-------------+-------------+
    | table1Count | table2Count | table3Count |
    +-------------+-------------+-------------+
    | 14          | 27          | 0           |
    +-------------+-------------+-------------+
    
    4 回复  |  直到 14 年前
        1
  •  111
  •   Julien Hoarau    14 年前

    您可以通过使用子查询来完成,每个tableCount有一个子查询:

    SELECT
      (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count, 
      (SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count,
      (SELECT COUNT(*) FROM table3 WHERE someCondition) as table3Count
    
        2
  •  11
  •   D'Arcy Rittich    14 年前

    您可以使用子查询来执行此操作,例如:

    select (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count, 
           (SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count 
    
        3
  •  5
  •   Interfector    14 年前

      SELECT COUNT(*) FROM table1 WHERE someCondition
      UNION
      SELECT COUNT(*) FROM table2 WHERE someCondition
      UNION
      SELECT COUNT(*) FROM table3 WHERE someCondition
    
        4
  •  4
  •   s3dev    4 年前

    这里有一种简单的方法,可以从多个表中获得行计数(如果有) 特定表上没有条件

    注:

    对于InnoDB,此计数是 近似值 . 然而,对米桑来说,这个数字是准确的。

    引自 docs :

    行数。一些存储引擎(如MyISAM)存储 精确计数。对于其他存储引擎,如InnoDB,此值为 到50%。在这种情况下,请使用SELECT COUNT(*)获得准确的计数 数一数。

    information_schema.tables

    SELECT 
        table_name, 
        table_rows
    FROM 
        information_schema.tables
    WHERE
        table_name like 'my_table%';
    

    输出:

    table_name    table_rows
    my_table_1    0
    my_table_2    15
    my_table_3    30
    

        5
  •  1
  •   the Tin Man    12 年前

    SELECT 
        COUNT(table1.*) as t1,
        COUNT(table2.*) as t2,
        COUNT(table3.*) as t3 
    FROM table1 
        LEFT JOIN tabel2 ON condition
        LEFT JOIN tabel3 ON condition