sql - 将 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 语句合二为一的最佳方法是什么,谢谢!
解决方案
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% 等效于您的查询(例如,如果在table2
wherea.column1
为 null 中有多个匹配项,则仅返回一行)。但我怀疑它会做你想要的。
推荐阅读
- unity3d - AR相机与平面上目标物体的角度信息(度)
- swiftui - 如何在 SwiftUI 中使两个 Text() 视图具有相同的动态字体大小,从而最大化字体大小?
- spring - Spring AspectJ 加载时间编织不适用于 5.3.3 和 Tomcat 9.0.37
- react-native - 如何禁用嵌套在抽屉导航器内的堆栈导航器内的抽屉?
- javascript - 通过 html 在 MySQL 数据库中添加时间
- python - 使用 Selenium Python 自动升级路由器固件
- laravel - Laravel 5 日期格式值
- r - 重定向函数的文档帮助页面
- javascript - 当字符长度小于特定数字时,jQuery更改html类
- python - 如何杀死以 sudo 启动的 python 子进程?以前的 SO 答案离开僵尸