2016-10-24 56 views
1

我有兩個查詢。提取查詢中的所有數據,並從另一個查詢提取一些數據

1查詢

SELECT A.ID1, A.ID2, B.ID3, B.approved FROM A INNER JOIN B ON A.ID2 = B.ID2 

這是結果:

ID1  ID2  ID3  approved 
ABC  A01  B01  5 
ABC  A01  B03  7 
ABC  A01  B05  11 
DEF  A02  B05  50 
DEF  A02  B06  50 

第二查詢

SELECT C.ID1, C.ID3, C.requested FROM C 

這是結果:

ID1  ID3  requested 
ABC  B01  10 
ABC  B02  20 
ABC  B03  30 
ABC  B04  40 
ABC  B05  50 
DEF  B02  99 
DEF  B05  88 
DEF  B01  77 
DEF  B06  66 

這是我預期的結果:

ID1  ID2  ID3 requested  approved 
ABC  A01  B01  10    5 
ABC  A01  B02  20    0 
ABC  A01  B03  30    7 
ABC  A01  B04  40    0 
ABC  A01  B05  50   11 
DEF  A02  B05  88   50 
DEF  A02  B06  66   50 
DEF  A02  B01  77    0 

我的查詢沒有顯示預期的結果:

SELECT 
    C.ID1, C.ID3, C.requested,X.approved 
FROM 
    C 
INNER JOIN (
      SELECT 
       A.ID1, A.ID2, B.ID3, B.approved 
      FROM 
       A 
      INNER JOIN 
       B 
      ON 
       A.ID2 = B.ID2)X 
ON C.ID3 = X.ID3 

編輯: 當使用添解決方案,這就是結果:

ID1  ID2  ID3 requested  approved 
    ABC  A01  B01  10    5 
    NULL  NULL  B02  20    0 
    ABC  A01  B03  30    7 
    NULL  NULL  B04  40    0 
    ABC  A01  B05  50   11 
    NULL  NULL  B02  99    0 
    NULL  NULL  B01  77    0 
    DEF  A02  B05  88   50 
    DEF  A02  B06  66   50 
    NULL  NULL  B01  77    0 

當我使用Order By NULL時被分組。我不知道哪個NULL屬於哪個ID1或ID2

+0

通過所有3列加入 –

+0

從我知道的任何加入操作中無法實現您的更新結果。 –

+0

爲什麼'ABC B02 20'出現在結果集中而不是'DEF B01 77'? –

回答

0

您當前的查詢幾乎看起來是正確的,只是它使用了INNER JOIN,它會從C中刪除與您的第一個連接查詢不匹配的記錄。此外,C與加入查詢之間的加入條件是ID1ID3應該匹配。試試這個:

SELECT t2.ID1, 
     t2.ID2, 
     t1.ID3, 
     t1.requested, 
     COALESCE(t2.approved, 0) 
FROM C t1 
LEFT JOIN 
(
    SELECT A.ID1, A.ID2, B.ID3, B.approved 
    FROM A INNER JOIN B 
     ON A.ID2 = B.ID2 
) t2 
    ON t1.ID1 = t2.ID1 AND 
     t1.ID3 = t2.ID3 
+0

有NULL值。並且如果有更多的數據,當我使用ORDER BY – Vahn

+0

時,帶有NULLS的行被合併。NULL值在列ID1和ID2中。該欄應填入數據(ABC和A01)。 – Vahn

+0

你在尋找一個完整的外連接嗎?請顯示代表實際問題的數據(您還沒有這樣做)。 –

相關問題