【问题标题】:SQL OR within WHEN (in CASE)WHEN 内的 SQL OR(在 CASE 中)
【发布时间】:2013-09-11 05:14:43
【问题描述】:

奇怪的是我在网上找不到这个, 我需要在 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,这会使我的查询超长。 没什么,有什么建议吗?

【问题讨论】:

标签: mysql sql database


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

【讨论】:

  • 谢谢查尔斯,这已经解决了我的问题,马上解决:) thx!
【解决方案2】:

CASE 中,您不能在没有括号的情况下启动单独的 SELECT ... 并且OR 可以使用以下内容:

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

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

... THEN ( SELECT col1 FROM tble WHERE ... ) ELSE END

【讨论】:

  • 嗨,cars10,这正是我所拥有的,我将编辑我的帖子,这只是我为解释我的问题而写的一个快速示例查询。
猜你喜欢
  • 2017-10-31
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多