来自MySQL中多个表的COUNT(*)

bcm*_*cfc 42 mysql count

如何从MySQL中的多个表中选择COUNT(*)?

如:

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
Run Code Online (Sandbox Code Playgroud)

编辑:

目标是返回:

+-------------+-------------+-------------+
| table1Count | table2Count | table3Count |
+-------------+-------------+-------------+
| 14          | 27          | 0           |
+-------------+-------------+-------------+
Run Code Online (Sandbox Code Playgroud)

Jul*_*rau 94

您可以使用子查询来执行此操作,每个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
Run Code Online (Sandbox Code Playgroud)


Red*_*ter 11

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

select (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count, 
       (SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count 
Run Code Online (Sandbox Code Playgroud)


S3D*_*DEV 6

如果特定表没有条件,这里是从多个表中纯粹获取行数的简单方法。

笔记:

对于 InnoDB,这个计数是一个近似值。但是,对于 MyISAM,计数是准确的。

引用自文档

行数。一些存储引擎,例如 MyISAM,存储确切的计数。对于其他存储引擎,比如 InnoDB,这个值是一个近似值,可能与实际值相差 40% 到 50%。在这种情况下,请使用 SELECT COUNT(*) 获得准确的计数。

使用该information_schema.tables表,您可以使用:

SELECT 
    table_name, 
    table_rows
FROM 
    information_schema.tables
WHERE
    table_name like 'my_table%';
Run Code Online (Sandbox Code Playgroud)

输出:

table_name    table_rows
my_table_1    0
my_table_2    15
my_table_3    30
Run Code Online (Sandbox Code Playgroud)


Int*_*tor 5

你可以使用UNION

  SELECT COUNT(*) FROM table1 WHERE someCondition
  UNION
  SELECT COUNT(*) FROM table2 WHERE someCondition
  UNION
  SELECT COUNT(*) FROM table3 WHERE someCondition
Run Code Online (Sandbox Code Playgroud)

  • Union将以单独的行而不是列的形式给出结果.OP正在寻找的结果集是一个包含3个计数列的行 (4认同)