L'instruction CASE peut-elle être utilisée dans les conditions JOIN ?
Lorsque vous essayez de joindre des tables en fonction de la valeur d'une colonne de la table sys.allocation_units
, le code suivant produit une erreur de syntaxe :
<code class="language-sql">SELECT * FROM sys.indexes i JOIN sys.partitions p ON i.index_id = p.index_id JOIN sys.allocation_units a ON CASE WHEN a.type IN (1, 3) THEN a.container_id = p.hobt_id WHEN a.type IN (2) THEN a.container_id = p.partition_id END </code>
Explication de la raison de l'erreur :
L'expression CASE renvoie une valeur unique, pas une expression d'égalité. Dans cet exemple, le résultat de l'expression CASE doit être comparé à une constante (telle que 1) pour déterminer si la condition est vraie.
Code corrigé :
<code class="language-sql">SELECT * FROM sys.indexes i JOIN sys.partitions p ON i.index_id = p.index_id JOIN sys.allocation_units a ON CASE WHEN a.type IN (1, 3) AND a.container_id = p.hobt_id THEN 1 WHEN a.type IN (2) AND a.container_id = p.partition_id THEN 1 ELSE 0 END = 1</code>
Ce code compare le résultat de l'expression CASE avec 1 et renvoie la ligne où la condition est vraie.
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!