Jointures conditionnelles dans MySQL : joindre dynamiquement des tables basées sur un type énuméré
Problème :
Considérez un schéma de table MySQL avec les colonnes id1, id2 et type. La colonne type est une valeur énumérée qui spécifie le nom d'une autre table. La tâche consiste à effectuer une jointure avec la table spécifiée en fonction de la valeur du type.
Par exemple, vous souhaitez effectuer les jointures conditionnelles suivantes :
Solution :
Bien que MySQL ne prenne pas directement en charge les jointures conditionnelles, une solution de contournement consiste à utiliser une jointure gauche multi-table avec un opérateur de cas :
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 :
Remarque :
Cette solution nécessite que toutes les tables jointes potentielles existent dans la base de données, quelle que soit la valeur du 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!