OVH Cloud OVH Cloud

jointure sur 3 tables

1 réponse
Avatar
Laurent
Bonjour

Avec MySQL (je ne connais pas d'autre SGBD), je peux effectuer une jointure
naturelle avec trois tables du type :

table1 NATURAL JOIN table2 NATURAL JOIN table3

J'obtiens alors le résultat attendu c'est à dire une jointure de mes trois
tables sur les champs dont les noms sont identiques, avec seulement les
lignes où ces champs sont renseignés.

Avec 2 tables, si je veux afficher aussi les lignes où l'un des champs est
NULL, je n'ai qu'à remplacer NATURAL JOIN par LEFT JOIN en mettant à gauche
la table "directrice"...

C'est ce dernier résultat que je n'arrive pas à obtenir avec 3 tables : je
voudrais obtenir aussi les lignes pour lesquelles un certain champ (utilisé
pour la jointure) est NULL.

"table1 LEFT JOIN table2 LEFT JOIN table3" provoque une erreur, de même que
toute combinaison de LEFT, de NATURAL et de ','

Un LEFT JOIN sur plus de 2 tables est-il possible ?
Sinon pourquoi ? (Peut-être que ça n'a pas de sens, j'ai encore du mal à me
représenter tout ça)
Comment obtenir autrement l'équivalent d'un NATURAL JOIN avec en plus les
lignes ou un champ est NULL ?

Merci pour toute aide.

1 réponse

Avatar
Fred BROUARD - SQLpro
a lire :
http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_externes
http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_natural

A +

Laurent a écrit:
Bonjour

Avec MySQL (je ne connais pas d'autre SGBD), je peux effectuer une jointure
naturelle avec trois tables du type :

table1 NATURAL JOIN table2 NATURAL JOIN table3

J'obtiens alors le résultat attendu c'est à dire une jointure de mes trois
tables sur les champs dont les noms sont identiques, avec seulement les
lignes où ces champs sont renseignés.

Avec 2 tables, si je veux afficher aussi les lignes où l'un des champs est
NULL, je n'ai qu'à remplacer NATURAL JOIN par LEFT JOIN en mettant à gauche
la table "directrice"...

C'est ce dernier résultat que je n'arrive pas à obtenir avec 3 tables : je
voudrais obtenir aussi les lignes pour lesquelles un certain champ (utilisé
pour la jointure) est NULL.

"table1 LEFT JOIN table2 LEFT JOIN table3" provoque une erreur, de même que
toute combinaison de LEFT, de NATURAL et de ','

Un LEFT JOIN sur plus de 2 tables est-il possible ?
Sinon pourquoi ? (Peut-être que ça n'a pas de sens, j'ai encore du mal à me
représenter tout ça)
Comment obtenir autrement l'équivalent d'un NATURAL JOIN avec en plus les
lignes ou un champ est NULL ?

Merci pour toute aide.





--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************