OVH Cloud OVH Cloud

Requete jointe

3 réponses
Avatar
jpw
Bonjour
Je vous expose mon pb: J'ai deux tables TB1 et TB2 qui sont li=E9es par
un champ dont les donn=E9es sont communes. (avec VB6)
Je peux cr=E9er une requ=EAte selection rendant des champs des 2 tables:
sql=3D"select TB1.champ1,TB1.champ2,TB2.champ1,TB2.champ2 from TB2, TB1,
TB1 INNER JOIN TB2 on TB1.champ2=3DTB2.champ2"
Ceci me rend un tableau dans lequel je trouve,lorsqu'il y a plusieurs
champ2 identiques dans TB2, des lignes de TB1 reprises.
Ceci est normal.
Voil=E0 ma question, Comment exprimer la requ=EAte pour que je n'ai
qu'une liaison unique (la premi=E8re rencontr=E9e par exemple).

3 réponses

Avatar
Salut,

En SQL tu as la notion de "GROUP BY". Cette instruction permet de regrouper
les enregistrements. Pour les autres champs (ce que tu veux une seule fois
mais uniquement le premier), il y a l'opération "first".

Exemple :
sql="select First(TB1.champ1),TB1.champ2,First(TB2.champ1) from TB2, TB1,
TB1 INNER JOIN TB2 on TB1.champ2=TB2.champ2
GROUP BY TB1.champ2 "

A la place de First, tu peux aussi utiliser Last, Min, Max, etc.

J'espère que celà répond à ton attente.
-Thierry-

"jpw" a écrit dans le message de
news:
Bonjour
Je vous expose mon pb: J'ai deux tables TB1 et TB2 qui sont liées par
un champ dont les données sont communes. (avec VB6)
Je peux créer une requête selection rendant des champs des 2 tables:
sql="select TB1.champ1,TB1.champ2,TB2.champ1,TB2.champ2 from TB2, TB1,
TB1 INNER JOIN TB2 on TB1.champ2=TB2.champ2"
Ceci me rend un tableau dans lequel je trouve,lorsqu'il y a plusieurs
champ2 identiques dans TB2, des lignes de TB1 reprises.
Ceci est normal.
Voilà ma question, Comment exprimer la requête pour que je n'ai
qu'une liaison unique (la première rencontrée par exemple).
Avatar
SAISAS
Bonjour,

normalement le code

sql="select DISTINCT TB1.champ1,TB1.champ2,TB2.champ1,TB2.champ2 from TB1
INNER JOIN TB2 on TB1.champ2=TB2.champ2"

devrait faire l'affaire ...

PS : as tu testé ton code SQL, j'ai l'impression qu'il est faux (?!).

"jpw" a écrit :

Bonjour
Je vous expose mon pb: J'ai deux tables TB1 et TB2 qui sont liées par
un champ dont les données sont communes. (avec VB6)
Je peux créer une requête selection rendant des champs des 2 tables:
sql="select TB1.champ1,TB1.champ2,TB2.champ1,TB2.champ2 from TB2, TB1,
TB1 INNER JOIN TB2 on TB1.champ2=TB2.champ2"
Ceci me rend un tableau dans lequel je trouve,lorsqu'il y a plusieurs
champ2 identiques dans TB2, des lignes de TB1 reprises.
Ceci est normal.
Voilà ma question, Comment exprimer la requête pour que je n'ai
qu'une liaison unique (la première rencontrée par exemple).




Avatar
Le problème avec le distinck, c'est qu'il aura toujours tous les
enregistrements. D'apres ce que j'ai compris, il veut qu'un seul
enregistrement par champ2, mais avec la première valeur trouvée pour les
autres champs.


"SAISAS" a écrit dans le message de
news:
Bonjour,

normalement le code

sql="select DISTINCT TB1.champ1,TB1.champ2,TB2.champ1,TB2.champ2 from TB1
INNER JOIN TB2 on TB1.champ2=TB2.champ2"

devrait faire l'affaire ...

PS : as tu testé ton code SQL, j'ai l'impression qu'il est faux (?!).

"jpw" a écrit :

> Bonjour
> Je vous expose mon pb: J'ai deux tables TB1 et TB2 qui sont liées par
> un champ dont les données sont communes. (avec VB6)
> Je peux créer une requête selection rendant des champs des 2 tables:
> sql="select TB1.champ1,TB1.champ2,TB2.champ1,TB2.champ2 from TB2, TB1,
> TB1 INNER JOIN TB2 on TB1.champ2=TB2.champ2"
> Ceci me rend un tableau dans lequel je trouve,lorsqu'il y a plusieurs
> champ2 identiques dans TB2, des lignes de TB1 reprises.
> Ceci est normal.
> Voilà ma question, Comment exprimer la requête pour que je n'ai
> qu'une liaison unique (la première rencontrée par exemple).
>
>