Maison >base de données >tutoriel mysql >Pourquoi ma requête MySQL échoue-t-elle avec une erreur de syntaxe lors de FULL OUTER JOIN ?
Manque de FULL OUTER JOIN dans MySQL et solution de contournement
Problème :
Une requête MySQL utilisant FULL OUTER JOIN
a entraîné une erreur de syntaxe. La requête a tenté de joindre plusieurs tables en utilisant FULL OUTER JOIN
, une syntaxe apparemment correcte mais non prise en charge par MySQL.
Solution :
MySQL ne prend pas directement en charge FULL OUTER JOIN
. La solution consiste à émuler cette fonctionnalité en utilisant une combinaison de LEFT JOIN
et RIGHT JOIN
avec des instructions UNION
.
Émulation de FULL OUTER JOIN :
Pour deux tables (t1
et t2
), un FULL OUTER JOIN
est répliqué comme ceci :
<code class="language-sql">SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id;</code>
Cette approche s'étend à plusieurs tables. Pour trois tables (t1
, t2
, t3
), l'équivalent serait :
<code class="language-sql">SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id LEFT JOIN t3 ON t2.id = t3.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id LEFT JOIN t3 ON t2.id = t3.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id RIGHT JOIN t3 ON t2.id = t3.id;</code>
Cette application récursive de LEFT JOIN
, RIGHT JOIN
et UNION
imite efficacement le comportement d'un FULL OUTER JOIN
dans MySQL, fournissant une solution de contournement pratique à cette limitation.
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!