0

我有 2 个表,想从中选择数据

table 1 :
id
name

table 2
id
name
table1.id

我想要一个查询来做出这个结果:

table1.id
table1.name
count(table2.id)

这很简单,可以通过这种方式解决:

SELECT 
c.id as corridor_id,
c.name as corridor_name,
(SELECT COUNT( r.id ) FROM rooms AS r WHERE r.corridorid = c.id ) as room_count
FROM corridors AS c

现在如果我添加另一个这样的表:

table3
id
name
table2.id

并想要这样的查询:

table1.id
table1.name
count(table2.id)
count(table3.id)

idk 我怎么能做这样的查询,但如果有办法我会很高兴找到它,很多 tnx

4

2 回答 2

2

您需要将它们全部连接在一起,然后按照以下方式对它们进行分组:

SELECT 
   t1.Id,
   t1.Name,
   Count(t2.Id) AS T2Count,
   Count(t3.Id) AS T3Count 
FROM table1 t1
JOIN table2 t2
ON t1.Id = t2.table1_id
JOIN table3 t3
ON t2.id = t3.table2_id
GROUP BY t1.Id, t1.Name
于 2013-04-15T12:40:48.937 回答
1

您在这里不需要嵌套SELECT语句。您可以通过分组来避免重复计算您想要的DISTINCT关键字:

SELECT 
    c.id as corridor_id,
    c.name as corridor_name,
    COUNT(DISTINCT r1.id),
    COUNT(DISTINCT r2.id)
FROM 
    corridors c
    JOIN rooms r ON r.corridorid = c.id
    JOIN rooms2 r2 ON r2.corridorid = c.id
GROUP BY c.id

如果您想正确处理缺失值(0 个计数),您也可以这样做:

SELECT 
    c.id as corridor_id,
    c.name as corridor_name,
    IFNULL(COUNT(DISTINCT r1.id), 0),
    IFNULL(COUNT(DISTINCT r2.id), 0)
FROM 
    corridors c
    LEFT JOIN rooms r ON r.corridorid = c.id
    LEFT JOIN rooms2 r2 ON r2.corridorid = c.id
GROUP BY c.id
于 2013-04-15T12:40:39.193 回答