【问题标题】:Case when statement while using in join condition not working in oracle在连接条件中使用时语句在 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; 

【问题讨论】:

    标签: sql oracle oracle12c


    【解决方案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%') 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 2021-12-29
      • 2020-01-14
      • 1970-01-01
      • 2022-07-23
      • 2013-03-23
      • 2021-09-22
      相关资源
      最近更新 更多