c'est quoi cette nouvelle norme? cela concerne quel environnement?
les 2 premières propositions sont équivalentes sauf que dans la première tu fais du sql "propre", on va dire...
en mettant dans la jointure uniquement des clés ou champ de jointure et que dans la close where tu fais la sélection ...
dans le seconde : tu fais un peu tout en même temps, tu écris une jointure en y ajoutant une sélection...
Les 2 jointures te remonteront les mêmes données, mais avec des temps d'exécutions qui vont être différents... surtout si tu as des grosses tables...
Pour ce qui est de l'autre requête, pareil... je ne sais pas ce que c'est le (+)
mais les 2 autres left outer join sont "pas compris" en fait
quand tu écris :
select * (pour simplifier) from a left outer join b on a.id = b.id
(tu prends tous les enregistrements qui sont dans la table a et pas forcement dans la table b)
si tu mets: where b.id = null cela veut dire que l'id n'est pas trouver"...
donc plutôt de faire un left outer join, avec une selection
tu fais un exception join et tu as tout de suite la bonne requête (plus simple à comprendre, non?)
select a.* from a exception join b on a.id = b.id
la seconde : letf outer join b on a.id= b.id and b.id is null...
sur AS400 (je ne sais pas si cela réagit vraiement pareil sur les autres plateformes)
remonte tout mais tu n'as aucune valeur des champs de b
NB.: J'avais vu ça déjà précement :
si tu as dans ta table a
id value
1 '1'
2 '2'
3 '3'
dans la table b
id value
3 '3'
4 '4'
tu as un résultat différent si tu fais un
SELECT * FROM
A
LEFT OUTER JOIN
B
ON
A.ID = B.ID
cela remonte tout "normalement" comme un left outer join...
1 '1' null null
2 '2' null null
3 '3' 3 '3'
4 '4' 4 '4'
mais si tu ajoutes par exemple dans la jointure on, une selection sur un champ de la seconde table...
SELECT * FROM
A
LEFT OUTER JOIN
B
ON
A.ID = B.ID
and b.value ='4'
cela les 3 lignes mais :
1 '1' null null
2 '2' null null
3 '3' null null
4 '4' 4 '4'
Et ceci est différent de:
SELECT * FROM
A
LEFT OUTER JOIN
B
ON
A.ID = B.ID
where
b.value ='4'
(qui correspondant en fait à un inner join)
Guillaume
Message édité par gpl73 le 23-04-2014 à 13:46:47
---------------
mieux vaut être un con au chaud, qu'un con gelé lol