如何从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)
如果特定表没有条件,这里是从多个表中纯粹获取行数的简单方法。
对于 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)
你可以使用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)
归档时间: |
|
查看次数: |
49876 次 |
最近记录: |