我有一个 MySQL 查询
SELECT *,
(SELECT COUNT(*) FROM B WHERE B.AID = A.ID) AS Sum1,
(SELECT COUNT(*) FROM C WHERE C.AID = A.ID) AS Sum2
FROM A
使用连接有哪些可能的替代方案?
我有一个 MySQL 查询
SELECT *,
(SELECT COUNT(*) FROM B WHERE B.AID = A.ID) AS Sum1,
(SELECT COUNT(*) FROM C WHERE C.AID = A.ID) AS Sum2
FROM A
使用连接有哪些可能的替代方案?
SELECT A.*, IFNULL(t1.sum, 0), IFNULL(t2.sum, 0)
FROM A
LEFT JOIN (SELECT AID, COUNT(AID) sum FROM B GROUP BY AID) t1 ON t1.AID = A.ID
LEFT JOIN (SELECT AID, COUNT(AID) sum FROM C GROUP BY AID) t2 ON t2.AID = A.ID
如果 B 和 C 表中有唯一的 ID,这将起作用。在我的示例中,这些字段称为 ID。
SELECT A.*,
COUNT(DISTINCT B.ID) AS Sum1,
COUNT(DISTINCT C.ID) AS Sum2
FROM A
LEFT JOIN B ON b.AID = A.ID
LEFT JOIN C ON C.AID = A.ID
GROUP BY A.ID
不确定这是否是您要查找的内容,以下是如何使用join
: 但假设...您的表格看起来像我用作演示的示例。如果不是,请与我们分享您的表架构和示例数据,以及您的预期结果......
http://sqlfiddle.com/#!2/1e65c/2
SELECT A.ID, A.NAME,
CASE WHEN B.AID = A.ID THEN COUNT(*) END AS SUM1,
CASE WHEN B.AID = A.ID THEN COUNT(*) END AS SUM1
FROM A
INNER JOIN B
ON A.ID = B.AID
INNER JOIN C
ON B.AID = C.AID
GROUP BY A.ID, A.NAME
;
SELECT A.ID, A.NAME, COUNT(B.AID) AS SUM1,
COUNT(C.AID) AS SUM1
FROM A
INNER JOIN B
ON A.ID = B.AID
INNER JOIN C
ON B.AID = C.AID
GROUP BY A.ID, A.NAME
;
| ID | NAME | SUM1 |
--------------------
| 1 | John | 2 |
| 2 | Tim | 4 |
| 3 | Jack | 2 |