首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加入表,无论是空表还是零表

加入表,无论是空表还是零表
EN

Stack Overflow用户
提问于 2016-04-09 03:43:52
回答 3查看 30关注 0票数 1

我有四张桌子:

表1: Wilayah

代码语言:javascript
复制
wilayah_id                  wilayah_name
    1                         wilayah_1
    2                         wilayah_2

表2:面积

代码语言:javascript
复制
area_id             wilayah_id            area_name
   1                     1                  area_1
   2                     1                  area_2
   3                     2                  area_3
   4                     1                  area_4

表3:人造丝

代码语言:javascript
复制
rayon_id          wilayah_id           area_id          rayon_name
    1                   1                   1               rayon_1
    2                   2                   3               rayon_2

表4:槟榔屿

代码语言:javascript
复制
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个表,结果将如下所示?

我所期望的结果。

代码语言:javascript
复制
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

我试过这个:

代码语言:javascript
复制
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)

但显示空结果

EN

回答 3

Stack Overflow用户

发布于 2016-04-09 04:48:50

代码语言:javascript
复制
SELECT
    penyulang_id,
    wilayah_name,
    area_name,
    rayon_name,
    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=p.rayon_id
ORDER BY penyulang_id ASC

这只是将查询集中在Penyulang表上,并将每一列连接到相应的表。如果连接失败,LEFT JOIN将确保返回数据(即Penyulang表上的值为null)。

票数 0
EN

Stack Overflow用户

发布于 2016-04-09 04:51:35

尝尝这个

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2016-04-09 04:54:41

看来你想把所有的行都从Penyulang。

对于返回的每一行,您希望

  • 从Wilayah (基于主键)查找单个行
  • 从(基于主键的)区域查找单个行
  • 基于人造丝主键的单行查找

看起来您的一些外键引用是空的。

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

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36512493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档