[英]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.