在连接条件中使用时语句在 oracle 中不起作用的情况
Posted
技术标签:
【中文标题】在连接条件中使用时语句在 oracle 中不起作用的情况【英文标题】:Case when statement while using in join condition not working in oracle 【发布时间】:2020-09-24 06:28:45 【问题描述】:在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;
【问题讨论】:
【参考方案1】:它在 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%')
【讨论】:
以上是关于在连接条件中使用时语句在 oracle 中不起作用的情况的主要内容,如果未能解决你的问题,请参考以下文章