2010-09-21 71 views
28

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

编辑:

的目标是回到这样的:

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

你叫什么目标? – Scott 2010-09-21 14:21:36

+0

需要更多细节 - 你能用文字描述你想要做什么吗? – egrunin 2010-09-21 14:22:01

+0

尝试将内部连接更改为左侧连接 – 2010-09-21 14:31:16

回答

65

您可以通过使用子查询每个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 
+0

我想从第一个计数行开始计数3(计数)行,并且只计算第二个计数行的计数行数。我该怎么做? – Adrian 2015-02-27 11:14:57

+1

我来这里试图找出如何在firebird数据库中做同样的事情。语法略有不同:SELECT * FROM (SELECT COUNT(*)AS table1Count FROM table1), (SELECT COUNT(*)AS table2Count FROM table2), (SELECT COUNT(*)AS table3Count FROM table3) – 2017-02-18 14:38:42

2

您可以使用UNION

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

联合将在单独的行中显示结果,而不是列。 OP所要查找的结果集是一个包含3个计数列的单行 – 2010-09-21 15:19:34

10

你可以用子查询做到这一点,如:

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

尝试改用:

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 
+0

在表格之间没有关系 – 2015-11-28 13:33:10