sql - 如何重写使用join case语句的sql脚本
问题描述
我有以下sql代码:
select t1.*
from t1
join t3 on t3.id = t1.id
join t2 on case when t1.date is null then t2.date = t3.date else t1.date = t2.date
但是在连接中使用 case 语句并不是最佳选择有没有办法重写这个,我什么都没有想到
解决方案
让我们先交换t2.date
,以便它总是发生在比较操作的左侧:
case when t1.date is null then t2.date = t3.date else t1.date = t2.date
变成:
case when t1.date is null then t2.date = t3.date else t2.date = t1.date
然后我们观察到t2.date
在case语句的两种情况下总是比较,即它是非空的。我们可以在下面的 coalesce 语句中表达 case 语句:
t2.date = coalesce(t1.date, t3date)
这看起来更干净,但在功能上仍然与 case 语句相同。
请注意,如果您没有从t2
and投射任何值t3
,那么执行 a 会更快where date in (select date from t2) or date in (select date from t3)
。
推荐阅读
- sql - Left join 和 Group 如何加入表
- c# - Unity容器DI,是否需要在代码库中的任何地方调用container.Resolve<>
- ios - 在 MTLBuffer 的一部分上运行计算内核?
- java - 大小为 30 GB 的大文件中的最大重复字数最佳方法
- woocommerce - 致命错误:未捕获的错误:无法使用 WC_Order_Refund 类型的对象作为数组
- visual-studio-code - vscode中的img水平
- c# - 从 .Net COM 类中检索 VBScript 中的字符串列表
- python - ModuleNotFoundError - 导入 Python 文件时出现气流错误
- javascript - Firestore OrderBy 和 Where 冲突
- c# - 身份/页面/管理中的 ASP.Net Core 2.2 HTML/CSS 导航栏问题