oracle case语句返回多个字符

时间:2015-07-24 15:01:10

标签: 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);
由于与表结合,应使用

大小写。 我正在

  

错误:缺少关键字

此查询

1 个答案:

答案 0 :(得分: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)
      )

我会根据您使用的值对此进行评论,似乎s1.sem是一个数字而s1.met1是一个字符。对我来说,当一个数字与一个字符串进行比较时,这是非常可疑的。