加入表是否为空和空

时间:2016-04-09 03:43:53

标签: mysql

我有4张桌子:

  

表1:Wilayah

wilayah_id                  wilayah_name
    1                         wilayah_1
    2                         wilayah_2
  

表2:面积

area_id             wilayah_id            area_name
   1                     1                  area_1
   2                     1                  area_2
   3                     2                  area_3
   4                     1                  area_4
  

表3:人造丝

rayon_id          wilayah_id           area_id          rayon_name
    1                   1                   1               rayon_1
    2                   2                   3               rayon_2
  

表4:Penyulang

penyulang_id      wilayah_id       area_id        rayon_id      penyulang_name
    1                  1               1             null           penyulang_1
    2                  1               null            1            penyulang_2
    3                  2               3              null          penyulang_3

如何使用单个查询连接这4个表,结果将如下所示?

  

我期待的结果。

penyulang_id   wilayah_name      area_name       rayon_name      penyulang_name
      1           wilayah_1       area_1          null           penyulang_1
      2           wilayah_1         null          rayon_1       penyulang_2
      3           wilayah_2        area_3         null            penyulang_3

我试过了:

SELECT
    penyulang_id,
    wilayah_name,
    area_name,
    rayon_name,
    penyulang_name
FROM
    wilayah
INNER JOIN area USING(wilayah_id)
INNER JOIN rayon USING (wilayah_id, area_id)
INNER JOIN penyulang USING (wilayah_id, area_id,rayon_id)

但显示空结果

2 个答案:

答案 0 :(得分:0)

试试这个

select t4.penyulang_id,t1.wilayah_name,t2.area_name,t3.rayon_name,
t4.penyulang_name
from wilayah t1 inner join area t2 on t1.wilayah_id =t2.t1.wilayah_id 
inner join rayon t3 on t2.wilayah_id =t3.wilayah_id
inner join penyulang t4 on t3.wilayah_id = t4.wilayah_id

答案 1 :(得分:0)

看起来你想要Penyulang的所有行。

对于返回的每一行,您需要

  • 从(基于主键)Wilayah
  • 查找单行
  • 从(基于主键)Area
  • 查找单行
  • 从(基于主键)Rayon
  • 查找单行

看起来你的一些外键引用是NULL。

所以看起来你只需要使用“外连接”......即使其他表中没有匹配的行,也要从Penyulang返回该行。

LEFT 关键字指定外部联接操作,即使未返回右侧匹配的行,也会返回左侧的行。

SELECT p.penyulang_id
     , w.wilayah_name
     , a.area_name
     , r.rayon_name
     , w.penyulang_name
  FROM Penyulang p
  LEFT
  JOIN Wilayah w
    ON w.wilayah_id = p.wilayah_id
  LEFT
  JOIN Area a
    ON a.area_id = p.area_id
  LEFT
  JOIN Rayon r
    ON r.rayon_id = r.rayon_id
 ORDER BY p.penyulang_id