【问题标题】:Left join oracle db左连接oracle db
【发布时间】:2020-09-28 15:40:57
【问题描述】:

我有两张桌子,我想加入他们(外)。

day  description
-----
1     mo
2     tu
...
5     fr



order   day     code
----      
1       1         0
2       2         0
3       1         2
4       3         0
5       4         0

结果我想要这张桌子:

description       order         code 
------
mo                  1           0
th                  2           0 
we                  4           0
tu                  5           0
fr                  null        null

当我像这样使用左连接时,代码无法正常工作,并且星期五没有显示:

select * 
from days d left join order o on d.id= o.day
where o.code = 0

但是当我这样写代码时,代码可以正常工作:

select *
from 
(select * from day) d
left join
(select * from order when code = 0) o
on d.id = o.day

有人知道为什么吗?

【问题讨论】:

  • Left Outer Join doesn't return all rows from my left table? 这是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: sql oracle join select left-join


【解决方案1】:

只需将left joined 表的条件放在left joinon 子句中,而不是在where 子句中:

select d.description, o.order, o.code
from days d 
left join order o on d.id= o.day and o.code = 0

where 子句中的条件是强制性的 - 因此where 子句消除了left join 返回为空的行,因为o.codenull,它不等于0

【讨论】:

    【解决方案2】:

    on 条件用于加入表。 其中条件是从连接结果中过滤记录。

    下面将在 d.id = o.day 的条件下加入表格 然后只选择 o.code=0

    的记录
    select * 
    from days d left join order o on d.id= o.day
    where o.code = 0
    

    为了同时加入 d.id = o.day 和 o.code=0 你需要在下面

    select * 
    from days d left join order o on d.id= o.day
    and o.code = 0
    

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多