Jointure conditionnelle avec des noms de tables dynamiques dans MySQL
Dans MySQL, il est possible d'exécuter des jointures basées sur des critères conditionnels, vous permettant de fusionner des données à partir de différentes tables de manière dynamique. Considérez le scénario suivant dans lequel vous disposez d'une table contenant une colonne « type » avec des valeurs énumérées représentant les noms d'autres tables.
Votre objectif est d'effectuer une jointure avec une table spécifique en fonction de la valeur du « type » colonne. Par exemple :
switch($type) { case 'table1': JOIN table1; break; case 'table2': JOIN table2; break; }
Solution
Malheureusement, MySQL ne prend pas en charge les jointures conditionnelles directement en utilisant une syntaxe de changement de casse. Cependant, vous pouvez obtenir des fonctionnalités similaires en utilisant une combinaison d'instructions CASE et LEFT JOIN. La requête suivante illustre cette approche :
SELECT t.id, t.type, t2.id AS id2, t3.id AS id3 FROM t LEFT JOIN t2 ON t2.id = t.id AND t.type = 't2' LEFT JOIN t3 ON t3.id = t.id AND t.type = 't3'
Dans cette requête, l'instruction CASE est remplacée par une série d'opérations LEFT JOIN. La clause ON pour chaque LEFT JOIN spécifie la condition de jointure en fonction de la valeur de la colonne 'type'.
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!