4

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

結合などを使用して可能な代替手段は何ですか?

4

3 に答える 3

2
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
于 2013-01-31T16:13:43.453 に答える
2

これは、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
于 2013-01-31T16:31:46.757 に答える
0

これがあなたが探しているものであるかどうかはわかりませんが、これを使用して達成する方法は次の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 |
于 2013-01-31T16:31:39.677 に答える