首页 > 解决方案 > 将 nvl 合并为单个语句

问题描述

有两个不同的表

表格1:

select nvl(a.column1,'dummy_employee') from table1 a;

表 2:

select nvl(b.column1,a.column1) from table1 a
left join table2 b
on a.key_col=b.key_col

逻辑:

如果 table1 中的 column1 为空,则返回 'dummy_employee',否则如果 table1 和 table2 中的 key_col 相等,则从 table2 返回 column1,否则从 table1 返回 column1

目的是将这两种逻辑合二为一,将以上 2 个 nvl 语句合二为一的最佳方法是什么,谢谢!

标签: sqloraclejoinleft-joinnvl

解决方案


coalesce()我认为您可以使用和调整查询来做您想做的事情:

select coalesce(b.column1, a.column1, 'dummy employee')
from table1 a left join
     table2 b
     on a.key_col = b.key_col and a.column1 is not null;

这不是 100% 等效于您的查询(例如,如果在table2wherea.column1为 null 中有多个匹配项,则仅返回一行)。但我怀疑它会做你想要的。


推荐阅读