在连接条件中使用时语句在 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 中不起作用的情况的主要内容,如果未能解决你的问题,请参考以下文章

案例语句在 PSQUERY Where 子句中不起作用

Liquid - if contains 语句在 for 循环中不起作用

AS 函数在 LARAVEL 数据库语句中不起作用

Concat 在 case 语句中不起作用

jQuery if 语句在 for 循环中不起作用

比较 Mongoose 对象 ID 时,if 语句在 Jade 中不起作用