|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 182 ![]() |
Bonjour,
Dans les cours de SqlPro , il y a une partie consacré au LEFT OUTER JOIN, avec notamment la requête suivante : Code SQL :
Or en PostgreSQL pour obtenir le résulta voulu il faut mettre le prédicat dans la condition de jointure comme ceci : Code SQL :
Existe-t-il une réponse logique à cela, ou ai-je louper un épisode. Merci de vos lumières.
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
||||
|
|
00
|
|
|
#2 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 446 ![]() |
Aucune explication logique à mon avis, sinon une coquille (pour ne pas dire une erreur)
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
10
|
|
|
#3 |
![]() ![]() |
Effectivement, comme je l'explique dans mon blog, la requête de SQLPro comporte en fait une jointure interne !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
|
|
#4 | |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 182 ![]() |
Citation:
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
|
00
|
|
|
#5 | ||
![]() ![]() |
Parmi les SGBD que j'ai pratiqué (Oracle, SQL-Server, Sybase), ça fonctionne ainsi.
La lecture régulière du forum me faire dire que c'est pareil chez PostGreSQL ainsi que MySQL. C'est tout à fait normal et expliqué dans le blog de Cinephil, peut-être pas assez mis en évidence. Si je reprends son exemple : Code :
En fait, vous demandez à ce qu'un élément de B soit forcément non-nul, la jointure externe n'a plus de sens et le résultat devient le même qu'avec une jointure forte.
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#6 |
|
Membre chevronné
![]() Administrateur de base de données Inscription : octobre 2006 Messages : 503 ![]() |
Bonjour
je me permet de completer les réponses.
Les 2 requêtes données en exemple par MaitrePylos, ne donneront pas un résultat identique, sauf si la table T_TELEPHONE posséde 1 ligne pour chaque CLI_ID. |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Rien à voir avec le nombre de ligne de la table T_TELEPHONE, c'est juste qu'un filtre (le WHERE) supprime les lignes où TYP_CODE est NULL. Donc le filtre supprime le but de la jointure externe et la transforme en jointure interne.
A noter que dans l'exemple 13 du chapitre III-C. Les jointures externes, SqlPro écrit bien OR TYP_CODE IS NULL ce qui revient au même que de remonter le filtre dans la clause ON. Par contre dans l'exemple 14 la coquille est présente. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
hmm, pour moi les 2 requêtes renvoient la même chose avec ou sans la condition du where.
Dans l'exemple 14 il compare un right outer join et un left outer join, ce qui devrait donner le même résultat vu le cas. |
|
|
00
|
|
|
#9 | |
![]() ![]() |
Citation:
__________________
Email : http://scr.im/waldar |
|
|
20
|
|
|
#10 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
@Punkoff, oui dans l'exemple 14, les 2 requêtes sont identiques mais souffrent chacune de la coquille mentionnée par MaitrePylos.
A savoir qu'en fait ce ne sont que des jointures internes. @Waldar, effectivement si TYP_CODE n'est pas NOT NULL le résultat n'est pas identique, merci. |
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
Vu la relation entre client et téléphone, non ca ne changera strictement rien de rajouter un "OR TYP_CODE IS NULL".
Le 1er exemple part sur un right outer join sur la table téléphone qui est en relation : client 0,n -------- 1,1 téléphone Enfin avec un autre modèle oui je serai d'accord avec toi ! |
|
|
00
|
|
|
#12 | ||
|
Membre éclairé
![]() |
bonjour tout le monde;
Attention, quelque SGBD connait une limite à la jointure externe ; car une jointure externe avec une condition sur la meme jointure n'est permise dans SGBD . exemple pour votre information,une requete de genre Code :
|
||
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
|
|
|
00
|
|
|
#14 | |||
![]() ![]() |
Citation:
MSAccess est-il un SGBD digne de ce nom ? [/TROLL] Access à la mauvaise manie d'écrire les joinures en les imbriquant et avec une forêt de parenthèses. Probablement que l'ajout d'une condition de restriction dans la condition de jointure le perturbe. Que se passe t-il si je dessine une requête en mode graphique avec une jointure à gauche et une condition de restriction dans la table externe ? (je ne me souviens même plus si on peut "dessiner" une jointure externe avec l'interface graphique des requêtes Access !)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
Copyright © 2000-2012 - www.developpez.com