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

Oracle从两个表中选择数据,如果其中一个为空,则返回null,oracle,select,join,Oracle,Select,Join,我在oracle数据库中有两个表fruit_cost和fruit_availability,详细信息如下: 水果成本如下所示: 水果|名称|水果|成本 苹果30 橙色| 7 甜瓜| 14 水果的可用性如下所示: 水果|名称|水果|可用性 桌子是空的 有没有什么好的选择可以得到这样的结果: 水果名称|水果成本|水果可用性 苹果| 30 |零 橙色| 7 |零 瓜| 14 | null您可以使用左连接来连接表 左联接将返回FROUT_cost表中的所有记录,而不管FROUT_AVAILABLY表中是

我在oracle数据库中有两个表fruit_cost和fruit_availability,详细信息如下: 水果成本如下所示: 水果|名称|水果|成本 苹果30 橙色| 7 甜瓜| 14 水果的可用性如下所示: 水果|名称|水果|可用性 桌子是空的 有没有什么好的选择可以得到这样的结果: 水果名称|水果成本|水果可用性 苹果| 30 |零 橙色| 7 |零
瓜| 14 | null

您可以使用左连接来连接表

左联接将返回FROUT_cost表中的所有记录,而不管FROUT_AVAILABLY表中是否有匹配的记录。您的查询将如下所示:

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

结果是:

| FRUIT_NAME | FRUIT_COST | FRUIT_AVAILABILITY |
------------------------------------------------
|      melon |         14 |             (null) |
|     orange |          7 |             (null) |
|      apple |         30 |             (null) |
如果您需要学习连接语法的帮助,这里有一个很好的方法。

Oracle语法:

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

SQL FIDLE。

最佳和最短结果4我的解决方案。谢谢@constantine虽然另一个答案中的语法仅对oracle有效,但oracle建议您使用外部联接语法,而不是联接运算符。这里有一个问题可以解释-感谢你的解释,它们非常有用。还有一个问题要问你,我应该在我的ORACLE DB中使用左连接还是左外连接?这两种语法之间的区别是什么?我发现:但这篇文章适用于MSSQL而不是ORACLE,这就是我仍然被困的原因:。请提供帮助。@constantine在使用JOINselect c.fruit\u name、c.fruit\u cost、a.fruit\u availability from fruit\u cost c left OUTER join fruit\u availability a on c.fruit\u name=a.fruit\u name按c.fruit\u name排序时,外部不需要使用语法
select *
from fruit_cost fc, fruit_availability fa
where fc.fruit_name = fa.fruit_name (+);