2016-09-27 66 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