Maison >base de données >tutoriel mysql >Comment puis-je utiliser une instruction CASE dans une clause SQL WHERE pour le filtrage conditionnel ?

Comment puis-je utiliser une instruction CASE dans une clause SQL WHERE pour le filtrage conditionnel ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-10 06:20:41238parcourir

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

Instruction Switch/Case de la clause WHERE en SQL

Instruction de requête :

La requête suivante tente d'utiliser l'instruction CASE dans la clause WHERE pour filtrer en fonction des valeurs de @locationType et @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>

Erreur :

Cette requête entraîne une erreur de syntaxe car l'expression CASE attend une seule valeur de retour. Diverses clauses WHEN incluaient à tort une comparaison d'égalité (= @locationID) qui n'était pas une expression CASE.

Solution :

La syntaxe correcte pour utiliser une instruction CASE dans une clause WHERE est d'attribuer l'expression à la colonne cible :

<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>

Dans cette requête modifiée, l'expression CASE renvoie l'identifiant d'emplacement correspondant en fonction de la valeur de @locationType. La clause WHERE compare ensuite cette valeur avec @locationID pour filtrer les résultats comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn