带有左连接的SQL Query Union

时间:2016-03-10 10:58:47

标签: sql select 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 

现在我得到了第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相同:(

2 个答案:

答案 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)
相关问题