sql - 在连接条件中使用时语句在 oracle 中不起作用的情况
问题描述
在sql中的join语句上我需要用例。我试过了,但我收到错误:
Missing expression:ORA-00905
我试过这个查询:
SELECT *
FROM abc a
LEFT JOIN (SELECT *
FROM anil_groups
WHERE datatype = 'C'
AND payor = 'SELECT') gr
ON CASE
WHEN Upper(a.sourcefilename) LIKE '%RIO%' THEN
gr.sourceid = 'SH_Rio_Tinto'
ELSE gr.sourceid = 'SH_Albertson'
END
LEFT JOIN (SELECT *
FROM tbl_danger
WHERE source = 'KK') spec
ON Upper(a.rollupid) = spec.code;
解决方案
它在 oracle 中不起作用。CASE WHEN 是一个提供非布尔值的构造,因此您必须使用它来运行您的布尔测试(Upper(a.sourcefilename) LIKE '%RIO%'
)并让它产生您想要比较的字符串值gr.sourceid
:
ON gr.sourceid = CASE
WHEN Upper(a.sourcefilename) LIKE '%RIO%' THEN
'SH_Rio_Tinto'
ELSE 'SH_Albertson'
END
您还可以重写您的联接以不使用它:
ON (gr.sourceid = 'SH_Rio_Tinto' AND Upper(a.sourcefilename) LIKE '%RIO%') OR
(gr.sourceid = 'SH_Albertson' AND Upper(a.sourcefilename) NOT LIKE '%RIO%')
推荐阅读
- r - 是否可以将 rmarkdown 转换为 pandoc markdown,同时将代码块选项保留为代码块属性?
- python - 如何解决 OpenCV 中图像颜色错误的问题?
- node.js - 错误:尝试将长字符串从 nodejs 发送到 python 脚本时产生 ENAMETOOLONG
- matplotlib - Pgk.add("PyPlot") 失败;“包 ZMQ 没有版本”。macOS 10.15.7
- f# - F# 记录上是否有一种继承类型
- scala - SparkSQL-根据聚合向DataFrame添加新列
- r - 将数据框中列中的值转换为它们自己的指示符列
- javascript - 如何使用角度删除对 div 点击的 tabindex 焦点?
- swift - 在 Swift 5 iOS 中调用 getIdToken 时未获取 Firebase 令牌 ID
- clickhouse - ClickHouse - ORDER BY WITH FILL - 月间隔