oracle case语句返回多个字符

SSA*_*SAT 0 sql oracle case

您好,请更正我的查询


select * from table S1
WHERE  S1.stu ='12345'
AND S1.sem = (Select Case When col2 > col4 Then col2 Else col4 End From table2)
And S1.met1 in  (case when (S1.sem = 1) then ('1', 'D', 'F' )
                      when (S1.sem = 2) then ('1', '5', '7',  )
                      when (S1.sem = 3) then ('1',  'D', 'F' )
                      else s1.sem end);
Run Code Online (Sandbox Code Playgroud)

因为与表结合而应该使用case.我明白了

错误:缺少关键字

对于此查询

Gor*_*off 6

那不是多么case有效.它是一个只返回一个值的标量表达式.

用基本逻辑替换它:

where ( (S1.sem = 1 and s1.met1 in ('1', 'D', 'F' ) ) or
        (S1.sem = 2 and S1.met1 in ('1', '5', '7') ) or
        (S1.sem = 3 and s1.met1 in ('1', 'D', 'F' ) ) or
        (s1.sem not in (1, 2, 3) and s1.met1 = s1.sem)
      )
Run Code Online (Sandbox Code Playgroud)

我会基于你正在使用的值来评论它,它似乎s1.sem是一个数字而且s1.met1是一个字符.对我来说,当一个数字与一个字符串进行比较时,这是非常可疑的.