簡體   English   中英

具有左聯接的SQL查詢聯合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM