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
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
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 +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
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.
Partager