Maison >base de données >tutoriel mysql >Puis-je utiliser une instruction CASE dans une condition JOIN ?

Puis-je utiliser une instruction CASE dans une condition JOIN ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-20 07:31:09319parcourir

Can I Use a CASE Statement in a JOIN Condition?

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!

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