【问题标题】:WHERE clause with nested multiple conditions具有嵌套多个条件的 WHERE 子句
【发布时间】:2012-08-24 21:38:27
【问题描述】:

我想检索带有WHERE 子句中条件的数据。
这是我的表格:

Name   Location    Age
----------------------
AAA     Bhuj       24
BBB     Mumbai     22
CCC     Bhuj       18
DDD     Bhuj       27
EEE     Mumbai     26

我在WHERE 子句中的条件是:
if location = 'Bhuj' then Age>20 else if location = 'Mumbai' then Age>25

我正在尝试使用此代码来实现此目的:

SELECT * FROM testing
WHERE 
CASE Location WHEN 'Bhuj' THEN Age>20
              WHEN 'Mumbai' THEN Age>25
END;

此代码适用于 MySQL (see this SQLFiddle),但不适用于 SQL Server (see this SQLFiddle),并出现以下错误:

'>' 附近的语法不正确。:SELECT * FROM testing WHERE case Location When 'Bhuj' then Age>20 When 'Mumbai' then Age>25 end

有什么建议吗?

【问题讨论】:

  • 看不到任何反对该问题的理由。赞成:)
  • @NitinGoyal 我的实际查询不同且复杂。我必须使用CASE 声明的地方。我在这里简单地展示了它。

标签: sql sql-server case where-clause multiple-conditions


【解决方案1】:

我认为这就是你想要实现的目标

   SELECT * 
   FROM testing
   WHERE (Location = 'Bhuj' AND Age>20) 
        OR (Location = 'Mumbai' AND Age>25)

查看SQLFiddle

更新:

Case 语句返回一个值,其中不能有条件。

【讨论】:

  • 是的,正确。但是我们不能使用我在示例中展示的CASE 语句吗?
  • 我们可以在WHERE 子句中使用CASE。请参阅 podiluska 的另一个答案。
  • 我没有说你不能在 where 子句中使用 case。我要说的是,你不能在 case 语句中有条件。如果您关心使用 case 语句,podiluska 的答案是正确的。
【解决方案2】:
SELECT * FROM testing 
WHERE  
Age > case Location When 'Bhuj' then 20 
              When 'Mumbai' then 25 
              end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2015-10-28
    • 2012-03-01
    • 2017-10-22
    相关资源
    最近更新 更多