[英]SQL Query Union with left join
我有一個表(TableA),其中包含一些數據和TableB的外鍵
TableA
--------------------
| ID | Name | FK |
--------------------
0 A 1
1 B 3
2 C 1
3 D 2
4 E 4
...
TableB
----------------
| PK | Status |
----------------
1 A21
2 A22
3 A23
4 A24
現在,我想計算TableA中有多少個條目具有TableB中的狀態...到目前為止沒有問題:
SELECT Count(TableA.FK) AS COUNTA, TableB.Status AS Status
FROM TableB
LEFT JOIN TableA ON TableB.PK = TableA.FK
GROUP BY TableB.Status, TableB.PK;
輸出:
------------------
| COUNTA | Status |
------------------
2 A21
1 A22
1 A23
1 A24
現在,我得到了第三張表(TableC),其結構與TableA相同,但數據不同。
TableC
--------------------
| ID | Name | FK |
--------------------
0 Ab 4
1 Bb 3
2 Cb 4
3 Db 1
4 Eb 1
...
我現在想計算TableA和TableC並將其輸出到一張表中:
例如:
-----------------------------
| COUNTA | Status | COUNTC |
-----------------------------
2 A21 2
1 A22 0
1 A23 1
1 A24 2
這是我到目前為止所擁有的:
SELECT SELECT Count(TableA.FK) AS COUNTA, TableB.Status AS Status, Count(TableC.FK) AS COUNTC
FROM ((TableB LEFT OUTER JOIN
TableA ON TableB.PK = TableA.FK)
LEFT OUTER JOIN TableC ON TableB.PK = TableC.FK)
GROUP BY TableB.Status, TableB.PK;
輸出不正確,CountC與Count A相同:(
您可以將相關查詢添加到第一個查詢中,以得到所需的結果,如下所示:
SELECT Count(TableA.FK) AS COUNTA,
TableB.Status AS Status,
(SELECT COUNT(*) FROM TableC where TableC.FK = TableB.PK) as COUNTB
FROM TableB
LEFT JOIN TableA ON TableB.PK = TableA.FK
GROUP BY TableB.Status, TableB.PK;
select TempA.COUNTA , TempA.Status ,TempB.COUNTC from
( SELECT Count(TableA.FK) AS COUNTA,TableB.Status AS Status ,TableA.FK as PK
FROM TableB LEFT JOIN TableA ON TableB.PK = TableA.FK
GROUP BY TableB.Status, TableB.PK) as TempA
LEFT JOIN
( SELECT Count(TableC.FK) AS COUNTC,TableA.FK as PK
FROM TableC LEFT JOIN TableA ON TableC.PK = TableA.FK
GROUP BY TableA.FK) as TempB
ON TempA.PK = TempB.PK)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.