0

奇怪的是我在网上找不到这个,我需要在 case 语句的 when 子句中使用 OR,例如:

SELECT type,color,brand,CASE type WHEN "foo" OR "BAR" OR "somethingelse" THEN SELECT ... FROM .... WHERE .... > ....;

我只是找不到使它起作用的方法,我尝试将其括在括号中:

SELECT type,color,brand,CASE type WHEN ("foo" OR "BAR" OR "somethingelse") THEN SELECT ... FROM .... WHERE .... > ....;

或者在方括号中:

SELECT type,color,brand,CASE type WHEN ["foo" OR "BAR" OR "somethingelse"] THEN SELECT ... FROM .... WHERE .... > ....;

问题是我有更多的选项组要检查,并为每个选项设置一个 WHEN,这将使我的查询超长。没什么,有什么建议吗?

4

2 回答 2

1

CASE没有括号的情况下,您无法启动单独的 SELECT ... 并且OR可以使用以下方法:

CASE WHEN type IN ("foo","BAR","somethingelse") THEN ... ELSE END

select如果您想从调用(子查询)中获取目标值,请在THEN部分中执行此操作

... THEN ( SELECT col1 FROM tble WHERE ... ) ELSE END
于 2013-09-11T05:18:28.013 回答
1

case有两种形式只有一种可以使用Or

  1. case x when val1 then result1 when val2 then result2 else defaultResult end
  2. case when x = val1 then result1 When y = val2 then result2 Else DefaultResult end,或者,更一般地说:
    case when [boolExp1] then reslt1 when [boolExp2] then reslt2 else defltReslt end

第二种形式可以使用Or, 或任何其他布尔运算符(Exists我记得除外)

 case when x = val1 or y = val2 or z in (val3, val4, val5) then result1 
      else defaultResult end
于 2013-09-11T05:20:45.260 回答