Bonjour à tous,
j'ai une requete SQL avec beaucoup de jointures de type left pour compléter les données d'une première série de tables liées par inner join...
Ca marche très bien sauf que dans une des tables jointes par left join, je constate que je peux avoir plusieurs doublons. je voudrais limiter à la toute première occurrence pour ne pas modifier le vrai nombre de ligne provenant des tables liées en inner join.
Mon explication n'est pas terrible, désolé
Pour être plus clair, disons que j'ai les tables suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 T1(id, libelle)={1, 'toto'; 2, 'tptp'; ... }, T2(id, libelle)={1, 'tata'; 2, 'tbtb'; ... }, T3(id, libelle)={1, 'txtx'; 1, 'tyty; 3, 'tztz'; ...}
je veux lier T1, T2 et T3 pour obtenir un tableau qui donne une seule ligne par T1.ID (où T3.ID ne va pas me créer un doublon car id non unique) :
> Je veux volontairement perdre tyty par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 1, toto, tata, txtx 2, tptp, tbtb, tztz ...
Si je fais :
> je recois 2 lignes avec id = 1 donc pas bon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM T1 INNER JOIN T2 ON T1.ID=T2.ID LEFT OUTER JOIN T3 ON T1.ID=T3.ID
Pour limiter à une seule ligne de résultat je connais cette syntaxe mais qui ne peut s'appliquer qu'après un where :
> il faudrait que je puisse appliquer cette directive directement à l'intérieur de la jointure.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT ID FROM T3 WHERE ID=1 fetch first 1 rows only
voilà... c'est pas simple à expliquer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ... LEFT OUTER JOIN T3 ON T1.ID=T3.ID (???que mettre??) ...J'espère que vous comprenez.
Merci de votre aide,
Nico
Partager