【问题标题】:Oracle select data from two tables and if one is empty return nullOracle 从两个表中选择数据,如果一个为空,则返回 null
【发布时间】:2012-12-31 06:49:01
【问题描述】:

我在 oracle 数据库中有两个表(fruit_cost 和fruit_availability),详细信息如下:

fruit_cost 如下所示:

水果名称 |水果成本
苹果| 高分辨率照片| CLIPARTO 30
橙色 | 7
瓜| 14

fruit_availability 如下所示:

水果名称 |水果可用性
表是空的

有没有什么好的选择可以得到这样的结果:

水果名称 |水果成本 |水果可用性
苹果| 高分辨率照片| CLIPARTO 30 |空值
橙色 | 7 |空值
瓜| 14 |空

【问题讨论】:

    标签: oracle select join


    【解决方案1】:

    您可以使用LEFT JOIN 加入表格。

    LEFT JOIN 将返回fruit_cost 表中的所有记录,无论fruit_availability 表中是否存在匹配记录。您的查询将如下所示:

    select fc.fruit_name, 
      fc.fruit_cost,
      fa.fruit_availability
    from fruit_cost fc
    left join fruit_availability fa
      on fc.fruit_name = fa.fruit_name
    

    SQL Fiddle with Demo

    结果是:

    | FRUIT_NAME | FRUIT_COST | FRUIT_AVAILABILITY |
    ------------------------------------------------
    |      melon |         14 |             (null) |
    |     orange |          7 |             (null) |
    |      apple |         30 |             (null) |
    

    如果您在学习连接语法方面需要帮助,这里是一个很棒的 visual explanation of joins

    【讨论】:

    • @constantine 而另一个答案中的语法仅对 oracle 有效,Oracle 确实建议您使用 OUTER JOIN 语法而不是连接运算符。这里有一个问题解释——stackoverflow.com/questions/1193654/…
    • 感谢您的解释,他们非常有帮助。
    • 再问你一个问题,在我的情况下我应该使用 LEFT JOIN 还是 LEFT OUTER JOIN (ORACLE DB),这两种语法有什么区别?
    • 我发现了这个:link 但这篇文章适用于 MSSQL 而不是 ORACLE,这就是我仍然被困的原因:)。请帮忙。
    • @constantine 使用 JOIN 时,OUTER 不是必需的语法
    【解决方案2】:
    select c.fruit_name, c.fruit_cost, a.fruit_availability
    from fruit_cost c 
       left outer join on fruit_availability a on
       c.fruit_name = a.fruit_name
    order by c.fruit_name
    

    【讨论】:

    • select c.fruit_name, c.fruit_cost, a.fruit_availability from fruit_cost c left outer join fruit_availability a on c.fruit_name = a.fruit_name order by c.fruit_name
    【解决方案3】:

    Oracle 语法:

    select *
    from fruit_cost fc, fruit_availability fa
    where fc.fruit_name = fa.fruit_name (+);
    

    SQL 小提琴here.

    【讨论】:

    • 最佳和最短结果 4 我的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-04-10
    • 2021-12-14
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2011-10-19
    相关资源
    最近更新 更多