我有一个表(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
现在我得到了第3个表(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与计数A相同:(
答案 0 :(得分:1)
您可以向第一个查询添加相关查询,以获得所需的结果:
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;
答案 1 :(得分:1)
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)