2016-09-27 222 views
0

不工作加入多個SQL表

SELECT a.name, atn.name 
FROM t1 a 
    JOIN t2 ap ON a.id = ap.area_id 
    JOIN t3 atn ON atn.id = ap.parent_id 

我有一個區域名稱和它們的類型(如針,病房和簡單的區域名稱)的表t1和t2表與他們的映射和表T3與類別名,他們的ID。

我想要一個帶有三列(區域名稱,別針,病房)的結果,即結果應該是哪個區域位於pin和病房之下。

t1

-------------------------- 
    | id | area name | type | 
    --------------------------- 
    | 1 | a   | 5 | 
    | 2 | b   | 8 | 
    | 3 | x   | 7 | 
    | 4 | z   | 8 | 
    | 5 | pq  | 8 | 
    --------------------------- 

t2

------------------------------ 
    | id | area_id | parent_id | 
    ------------------------------ 
    | 1 | 2  | 1  | 
    | 2 | 2  | 3  | 
    | 3 | 4  | 1  | 
    | 4 | 5  | 3  | 
    ----------------------------- 

t3

------------------ 
    | id | name | 
    ------------------ 
    | 5 | pin  | 
    | 7 | ward | 
    | 8 | area | 
    ------------------ 

結果:

-------------------------- 
    | area | pin | ward | 
    -------------------------- 
    | b  | a  | x | 
    | z  | a  |  | 
    | pq |  | x | 
    -------------------------- 

任何人都知道如何得到這個,請幫助我。我不知道如何獲得這個價值。我試過但找不到任何東西。

+1

沒有任何情況符合JOIN t3 atn ON atn.id = ap.parent_id - 所以我不希望它能夠工作。 –

+0

根據您的情況,您的預期結果不正確。 –

+0

@ BrianTompsett-湯萊恩這是一個關鍵問題 – Drew

回答

0

只是一個猜測。通過父類型轉換父母名稱

SELECT a.name, 
    max(case when atn.name = 'pin' then p.name end) as pin 
    max(case when atn.name = 'ward' then p.name end) as ward 
FROM t2 ap 
    JOIN t1 a ON a.id = ap.area_id 
    JOIN t1 p ON p.id = ap.parent_id 
    JOIN t3 atn ON atn.id = p.type 
GROUP BY a.name 
+0

謝謝,但我們必須在區域列中只顯示區域名稱,所以我們必須添加「和條件類型」......但感謝您的幫助。 :) – sahil0021