Jointures de table conditionnelles dans MySQL
Considérez un scénario dans lequel vous avez une table avec les colonnes id1, id2 et type, où type est un valeur énumérée représentant le nom d’une autre table. Votre objectif est d'effectuer une jointure avec la table réelle en fonction du type spécifié.
Traditionnellement, vous pouvez envisager d'utiliser une instruction switch pour joindre conditionnellement la table concernée :
switch($type) { case 'table1': JOIN table1; break; case 'table2': JOIN table2; break; }
Cependant, MySQL ne prend pas directement en charge cette approche. Au lieu de cela, vous pouvez réaliser des jointures conditionnelles en utilisant une combinaison de clauses LEFT JOIN et ON. Par exemple, pour joindre les tables table1 et table2 en fonction de la valeur de type, vous pouvez utiliser la requête suivante :
SELECT t.id, t.type, t1.id AS id2, -- Assuming table1 alias is 't1' t2.id AS id3 -- Assuming table2 alias is 't2' FROM t LEFT JOIN t1 ON t1.id = t.id AND t.type = 'table1' LEFT JOIN t2 ON t2.id = t.id AND t.type = 'table2'
Dans cette requête, t représente la table d'origine avec les colonnes id1, id2 et type. Les clauses LEFT JOIN effectuent des non-équijointures en fonction de la condition de type. En spécifiant les alias t1 et t2, vous pouvez récupérer les colonnes des tables jointes.
Cette approche vous permet de joindre conditionnellement des tables en fonction des valeurs stockées dans la colonne type, imitant efficacement le comportement d'une instruction switch pour les jointures de tables dans MySQL.
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!