Pb sql left outer join [Résolu/Fermé]

Signaler
-
 colt -
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

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
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>
Merci georges,

J'ai essayé mais j'ai toujours la même erreur
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
Excuse la faute d'orthographe "close" il faut lire "clause".

Georges
On va recommencer mais sans la close left outer join.

Il faut lire :On va recommencer mais sans la clause left outer join.
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
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).
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.
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
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
Je suis ravi que tu aies trouvé la solution.
Bravo.

Bonne continuation.

Georges