J'ai trois tables table1, table2 et table2. table1.parent_id est l'identifiant d'un enregistrement dans table2 ou table3, en fonction de la valeur de table1.parent_type. Maintenant, je veux rejoindre table1 avec table2 et table3, en fonction de la valeur de table1.parent_type.MySQL join - Sélectionnez la table en fonction de la condition
Cela peut être fait en utilisant UNION. Mais y a-t-il une autre méthode?
Ceci est ma requête en cours
(SELECT c.*, a.title
FROM table1 c
LEFT OUTER JOIN table2 a
ON c.parent_id = a.id
WHERE c.parent_type = 0)
UNION (SELECT c.*, p.title
FROM table1 c
LEFT OUTER JOIN table3 p
ON c.parent_id = p.id
WHERE c.parent_type = 1)
ORDER BY id DESC
LIMIT 10
Mise à jour: Ceci est une autre méthode (De la réponse de Dark Falcon)
SELECT c.*, IF(c.parent_type = 0, a.title, p.title) as title FROM table1 c
LEFT OUTER JOIN table2 a ON c.parent_id = a.id AND c.parent_type = 0
LEFT OUTER JOIN table3 p ON c.parent_id = p.id AND c.parent_type = 1
WHERE a.id IS NOT NULL OR p.id IS NOT NULL ORDER BY id DESC LIMIT 10;
Mise à jour 2: Je PROFILES les requêtes avec profileur de requête. La jointure multi-tables est plus de 100 fois plus rapide pour tous mes tests.
Quelle est la probabilité qu'un parent_id ait des enregistrements dans les deux types? Si c'est le cas, voulez-vous voir les deux ou l'une de ces valeurs de titre? –
Ce sera soit table2 ou table2, pas les deux. Il y aura un et un seul enregistrement. –
soit table2 ou table2 mais toujours table2 –