加入多个SQL表

时间:2016-09-27 07:08:55

标签: mysql sql join

不工作

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,其中包含区域名称及其类型(如pin,ward和简单区域名称)和表t2及其映射和表t3,其中包含类型名称及其ID。

我想要一个有三列(区域名称,别针,区域)的结果,即结果应该是哪个区域位于别针和区域内。

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 个答案:

答案 0 :(得分: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