ホームページ >データベース >mysql チュートリアル >SQL WHERE 句で CASE ステートメントを条件付きフィルタリングに使用するにはどうすればよいですか?

SQL WHERE 句で CASE ステートメントを条件付きフィルタリングに使用するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-10 06:20:41195ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。