Exploiter les instructions CASE dans les JOIN de SQL Server
L'emploi des instructions CASE dans les conditions JOIN de SQL Server peut être délicat. L'utilisation directe d'une instruction CASE dans la clause JOIN entraîne souvent des erreurs de syntaxe telles que "Syntaxe incorrecte près de '='."
Comprendre l'erreur de syntaxe
Cette erreur survient car une instruction CASE produit une valeur scalaire, pas un résultat booléen vrai/faux. Les conditions JOIN nécessitent cependant des expressions booléennes pour décider de joindre ou non des lignes. Une simple instruction CASE sans comparaison ne satisfait pas ce besoin.
La bonne approche
La solution consiste à concevoir l'instruction CASE pour générer des valeurs booléennes (ou des valeurs qui peuvent être facilement comparées à une valeur booléenne). Cette sortie est ensuite utilisée dans une comparaison pour contrôler la jointure.
Voici un exemple de condition JOIN améliorée :
<code class="language-sql">ON CASE WHEN a.type IN (1, 3) THEN CASE WHEN a.container_id = p.hobt_id THEN 1 ELSE 0 END WHEN a.type IN (2) THEN CASE WHEN a.container_id = p.partition_id THEN 1 ELSE 0 END ELSE 0 END = 1</code>
Cette instruction révisée utilise des instructions CASE imbriquées. Les instructions CASE internes renvoient 1 si la condition de jointure est remplie (par exemple, a.container_id = p.hobt_id
) et 0 sinon. L'instruction CASE externe combine ensuite ces résultats. La comparaison finale (= 1
) garantit que les lignes sont jointes uniquement lorsque les conditions des instructions CASE imbriquées sont vraies.
Cette méthode permet la jointure conditionnelle de lignes en fonction de critères spécifiques en utilisant efficacement les instructions CASE dans la condition JOIN.
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!