首页 >数据库 >mysql教程 >如何在SQL WHERE子句中使用CASE语句进行条件过滤?

如何在SQL WHERE子句中使用CASE语句进行条件过滤?

Barbara Streisand
Barbara Streisand原创
2025-01-10 06:20:41233浏览

How Can I Use a CASE Statement in a SQL WHERE Clause for Conditional Filtering?

SQL中WHERE子句的Switch/Case语句

查询语句:

以下查询尝试在WHERE子句中使用CASE语句,根据@locationType和@locationID的值进行过滤:

<code class="language-sql">declare @locationType varchar(50);
declare @locationID int;

SELECT column1, column2
FROM viewWhatever
WHERE
CASE @locationType
    WHEN 'location' THEN account_location = @locationID
    WHEN 'area' THEN xxx_location_area = @locationID
    WHEN 'division' THEN xxx_location_division = @locationID
END;</code>

错误:

此查询导致语法错误,因为CASE表达式期望单个返回值。各个WHEN子句错误地包含了不属于CASE表达式的等式比较(= @locationID)。

解决方案:

在WHERE子句中使用CASE语句的正确语法是将表达式赋值给目标列:

<code class="language-sql">declare @locationType varchar(50);
declare @locationID int;

SELECT column1, column2
FROM viewWhatever
WHERE
@locationID = 
  CASE @locationType
      WHEN 'location' THEN account_location
      WHEN 'area' THEN xxx_location_area
      WHEN 'division' THEN xxx_location_division
  END;</code>

在这个修改后的查询中,CASE表达式根据@locationType的值返回相应的定位标识符。然后,WHERE子句将此值与@locationID进行比较,以按预期过滤结果。

以上是如何在SQL WHERE子句中使用CASE语句进行条件过滤?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn