Pb sql left outer join

Résolu/Fermé
florence - 2 oct. 2008 à 08:48
 colt - 29 avril 2011 à 11:00
Bonjour,

je voudrais extraire les enregistrements de la table cli + 2 champs de la table tmp_devis si ceux ci existent (null sinon)
ma joiture se fait sur 3 champs (scodsoc, scodagc, scodcli)

Ma requete est la suivante mais j'ai toujours sql error
select
cli.scodsoc,
cli.scodagc,
cli.scodcli,
cli.sdescli,
cli.svil,
tmp_devis.date_devis,
tmp_devis.nb_devis
from
LEFT OUTER JOIN tmp_devis ON
cli.scodsoc=tmp_devis.scodsoc and
cli.scodagc=tmp_devis.scodagc and
cli.scodcli=tmp_devis.scodcli
;

Merci
A voir également:

12 réponses

Bonjour Florence,

Voici ce que devrait être ta requête :

select
c.scodsoc,
c.scodagc,
c.scodcli,
c.sdescli,
c.svil,
d.date_devis,
d.nb_devis
from cli c, tmp_devis d
LEFT OUTER JOIN tmp_devis d ON
d.scodsoc=c.scodsoc and
d.scodagc=c.scodagc and
d.scodcli=c.scodcli
;

En principe, ce devrait être correct. Mais, comme il y a deux ans que je ne l'ai plus fait, alors, si j'ai fait une erreur, pardonne moi.

Georges
0
select
c.scodsoc,
c.scodagc,
c.scodcli,
c.sdescli,
c.svil,
d.date_devis,
d.nb_devis
from cli c
LEFT OUTER JOIN tmp_devis d ON
c.scodsoc=d.scodsoc and
c.scodagc=d.scodagc and
c.scodcli=d.scodcli
;
Il s'agit d'un jointure à gauche. En gros, tu vas extraire tous les valeurs communes aux 2 tables + les valeurs qui sont dans la table de gauche (cli) mais dans la table de droite (tmp_devis). C'était juste la répartition de tes tables qui n'étaient pas correcte. <table1> LEFT OUTER JOIN <table 2>
0
Merci georges,

J'ai essayé mais j'ai toujours la même erreur
0
Florence, ça m'irrite que ça ne marche pas.

On va recommencer mais sans la close left outer join.
Essaie ceci pour contrôler la requête:

SELECT
c.scodsoc,
c.scodagc,
c.scodcli,
c.sdescli,
c.svil,
d.date_devis,
d.nb_devis

FROM cli c, tmp_devis d

WHERE
d.scodsoc=c.scodsoc and
d.scodagc=c.scodagc and
d.scodcli=c.scodcli;

Fais l'essai par un copier-coller.
Merci

Georges
0
Excuse la faute d'orthographe "close" il faut lire "clause".

Georges
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
??
0
On va recommencer mais sans la close left outer join.

Il faut lire :On va recommencer mais sans la clause left outer join.
0
Merci de ton aide. Cela me rassure, je ne suis pas la seule à bloquer :-)

cela me donne bien les enreg présent dans les 2 tables

Si je fais cela, cela marche mais les temps de réponse ne sont pas top top
select
c.scodsoc,
c.scodagc,
c.scodcli,
c.sdescli,
c.svil,
(select d.date_devis||';'||d.nb_devis from tmp_devis d
where d.scodsoc=c.scodsoc and d.scodagc=c.scodagc and d.scodcli=c.scodcli)
from
cli c
0
Excuse moi, mais, je suis terriblement têtu.
Veux-tu bien faire un copier-coller de ma syntaxe.
Merci

Georges.

PS. J'adore les bases de données. (C'est vrai).
0
C'est ce que j'ai fais et cela m'a ramené que les enreg présents dans les 2 tables mais pas ceux qui existe que dans cli.
0
D'accord, mais cela me permet de vérifier que ma requête fonctionne et que je n'ai plus d'erreur.
Maintenant, on va essayer d'affiner.

Essaie (toujours par copier/coller)

SELECT
c.scodsoc,
c.scodagc,
c.scodcli,
c.sdescli,
c.svil,
d.date_devis,
d.nb_devis

FROM cli c, tmp_devis d

LEFT OUTER JOIN c on
c.scodsoc=d.scodsoc and
c.scodagc=d.scodagc and
c.d.scodcli=d.scodcli;

Merci
0
j'ai trouvé

select
c.scodsoc,
c.scodagc,
c.scodcli,
c.sdescli,
c.svil,
d.date_devis,
d.nb_devis,
from
cli c, outer tmp_devis d
where
d.scodsoc=c.scodsoc and d.scodagc=c.scodagc and d.scodcli=c.scodcli

merci quand meme de ton aide
0
Je suis ravi que tu aies trouvé la solution.
Bravo.

Bonne continuation.

Georges
0