繁体   English   中英

MySQL 中多个表的 COUNT(*)

[英]COUNT(*) from multiple tables in MySQL

go 如何从 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

编辑:

目标是返回这个:

+-------------+-------------+-------------+
| table1Count | table2Count | table3Count |
+-------------+-------------+-------------+
| 14          | 27          | 0           |
+-------------+-------------+-------------+

您可以通过使用子查询来实现,每个 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

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

select (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count, 
       (SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count 

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

笔记:

对于 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%';

输出:

table_name    table_rows
my_table_1    0
my_table_2    15
my_table_3    30

你可以使用联合

  SELECT COUNT(*) FROM table1 WHERE someCondition
  UNION
  SELECT COUNT(*) FROM table2 WHERE someCondition
  UNION
  SELECT COUNT(*) FROM table3 WHERE someCondition

你可以通过这种方式做到这一点。

SELECT (select count(*) from table1) + (select count(*) from table2) as total_rows

您可以根据需要添加任意数量的表。

尝试更改为:

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

不是直接的,但它有效......

1.- 创建您需要计算行数的表的列表。

2.- 将该列表放在电子表格的第一列中。

3.- 在第二列第一行中,使用以下公式:

="SELECT '"&A1&"', (SELECT count(*) FROM "&A1&") UNION"

4.- 填写公式。

5.- 复制第二列并粘贴以进行查询。

6.- 不要忘记删除最后一个 UNION。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM