我有一个MySQL查询写这个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查询写这个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
什么是可能的选择使用连接左右?
这会工作。在我的例子中,这些字段被称为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
这一个似乎相当于我的查询和执行相似。 我只是不明白,MySQL如何计算速度非常快 – brooNo
不知道这是你在找什么,这里是它如何使用join
实现:但你assumptions..that表看起来像样我都用作演示。如果不是的话,请与我们与您预期的结果分享你的表模式和样本数据,...如果有在B和C表的唯一ID
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 |
这不是'JOIN'-able查询,因为这两个数可能不同。 – tadman
考虑以一个sqlfiddle和/或一组DDL的形式提供一个更具体的例子 – Strawberry