自从我完成任何MySQL以来已经有一段时间了,所以我可能只是在这里忘记了一些基本知识-但是这是我的情况:

(我的表的简化版)

表A(2行)

d_id

d_nm

d_active

表B(与d_id#1匹配的10行,与d_id#2匹配的0行)

t_id

t_nm

d_id

t_active

表C(与d_nm#1匹配的11行(总计496),与d_nm#2匹配的0行)

c_id

c_nm

d_nm

尺寸1

2号

查询:

SELECT
    a.d_id,
    a.d_nm,
    COUNT(b.t_id) AS tcount,
    SUM(c.size1+c.size2) AS size
FROM TableA a
LEFT JOIN TableB b
ON (b.d_id=a.d_id AND b.t_active=1)
LEFT JOIN TableC c
ON (c.d_nm=a.d_nm)
WHERE a.d_active=1
GROUP BY a.d_id,a.d_nm
ORDER BY a.d_nm


期望:

d_id --- d_nm --- tcount ---大小

1 ------- d1 ------- 10 -------- 496

2 ------- d2 ------- 0 ---------- 0

实际结果:

d_id --- d_nm --- tcount ---大小

1 ------- d1 ------- 110 ------- 5,456

2 ------- d2 ------- 0 ---------- 0

由于某种原因,它会将tcount的结果乘以size中的记录数-反之亦然。我以为这是我的“加入”还是我的“分组依据”的问题……但似乎无法正确解决!

最佳答案

想到这一点,这是可行的。而不是对整个表进行常规的左联接,我只对表的查询结果进行了左联接。由于目前我的数据量很小,因此运行两个查询的时间是可比的。不确定随着表的大小增长是否会对性能产生影响?如果有人知道更好的方法,请告诉我!

SELECT a.d_id,a.d_nm,b.tcount,c.size FROM TableA a
LEFT JOIN(SELECT d_id,COUNT(t_id)AS tcount FROM TableB WHERE t_active=1 GROUP BY d_id)b ON(b.d_id=a.d_id)
LEFT JOIN(SELECT d_nm,SUM(size1+size2)AS size FROM TableC GROUP BY d_nm)c ON(c.d_nm=a.d_nm)
WHERE a.d_active=1 ORDER BY a.d_nm

10-06 06:16