Oracle从两个表中选择数据,如果一个为空,则返回null

时间:2013-01-16 20:19:46

标签: oracle select join

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

     fruit_cost看起来像这样:     

    fruit_name | fruit_cost     
    苹果|三十     
    橙色| 7     
    甜瓜| 14     

     fruit_availability看起来像这样:     

    fruit_name | fruit_availability     
    表是空的     

    是否有任何好的选择来获得这样的结果:     

    fruit_name | fruit_cost | fruit_availability     
    苹果| 30 |空值     
    橙色| 7 |空值     
    甜瓜| 14 |空

3 个答案:

答案 0 :(得分:7)

您可以使用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

答案 1 :(得分:2)

Oracle语法:

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

SQL小提琴here

答案 2 :(得分:0)

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