Bonjour,
Peut-on combiner une jointure naturelle avec une jointure externe? Du genre: <Table1> LEFT JOIN <Table 2> ON <condition> NATURAL JOIN <Table 3>.
Merci!
Bonjour,
Peut-on combiner une jointure naturelle avec une jointure externe? Du genre: <Table1> LEFT JOIN <Table 2> ON <condition> NATURAL JOIN <Table 3>.
Merci!
D'une manière générale, évite le NATURAL JOIN. Il est bien plus clair pour celui qui reprend le code plus tard de lire la condition de jointure en clair :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FROM table1 t1 INNER JOIN table2 t2 ON t2.col2 = t1.col1
Le NATURAL JOIN est une vaste connerie que seul MySQL a implémenté.
Evitez-le absolument si vous ne voulez pas voir votre appli se planter un jour ou l'autre !
Voici ce que je dit dans mon livre sur SQL :
"
Remarque
Si vous n’avez pas respecté les règles de la modélisation de données, notamment en faisant en sorte que chaque information au sein du système d’information ait un nom unique, alors il vous sera impossible d’utiliser la jointure naturelle.
En outre, la jointure naturelle n’est pas toujours adéquate. Elle ne peut être proprement mise en œuvre que s’il n’existe toujours qu’une seule possibilité de jointure entre deux tables, alors que la réalité nous montre que cela n’est pas systématiquement vrai.
"
Je rajouterais qu'en sus :
1) elle s=ne sait faire que de l'équi jointure alors qu'il existe de nombreuses autres possibilité de jointure (thêta jointures)
2) l'ajout d'une colonne dans une table avec un nom identique à une autre colonne d'une table peut provoquer des erreurs de jointures dans des requêtes déjà écrite !
Notez que seul MySQL cet ersatz de SGBDR a implémenté le NATURAL JOIN, ce que les tous les grands éditeurs ont fuit ! À lire : http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux
A +
Il me semble d'ailleurs que PostGre l'a implémenté en premier.
Mais en effet, le jour où tu te dis "tiens, je vais ajouter un horodatage dans mes tables"
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 alter table table1 add datmod datetime getdate(); alter table table2 add datmod datetime getdate(); alter table table3 add datmod datetime getdate(); ... alter table tableX add datmod datetime getdate();
Bouh ! Y'a plus une seule requête qui marche !
C'est aussi implémenté chez Oracle, mais je partage l'avis de SQLPro quant à leur utilisation plus piégeuse que bénéfique.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager