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
Libérer: 2025-01-10 06:20:41
original
197 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal