pb SQL : Jointure externe (plusieurs)

pb SQL : Jointure externe (plusieurs) - SQL/NoSQL - Programmation

Marsh Posté le 28-09-2004 à 17:43:18    

J'utilise access 2000, j'ai un pb avec une requete ou je dois mettre 2 jointures externe.
 
Ma table1 a une relation avec la table2 et la table3. La table2 et 3 n'ont pas de relation. Et il s'agit des données de la table1 que je veux afficher dc je fais :  
 
SELECT * FROM TABLE1  
LEFT JOIN (TABLE2 LEFT JOIN TABLE1 ON TABLE1.CODEA = TABLE2.CODEA) ON TABLE3.CODEB = TABLE1.CODEB  
 
lorsque j'execute cette requete j'ai le message : "Erreur de syntaxe ds l'operation JOIN"
 
J'arrive pas du tt a comprendre pkoi ca ne fonctionne pas. Si vous avez des exemples ca serait sympa merci

Reply

Marsh Posté le 28-09-2004 à 17:43:18   

Reply

Marsh Posté le 28-09-2004 à 20:27:58    

Ce serait pas simplement :
 
SELECT * FROM TABLE1
LEFT JOIN TABLE2 ON TABLE2.CODEA = TABLE1.CODEA
LEFT JOIN TABLE3 ON TABLE3.CODEB = TABLE1.CODEB;
 
???

Reply

Marsh Posté le 28-09-2004 à 21:34:08    

deux ON dans une jointure, ca passe ca ??
 
Select * From table1 A
inner join table2 B on B.champ1 = A.champ1
inner join table3 C on C.champ2 = A.champ2
 
par exemple :o


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 28-09-2004 à 21:59:07    

ben oui ça passe, on peut faire autant de jointures qu'on veut :)

Reply

Marsh Posté le 29-09-2004 à 08:57:47    

Non Beegee ta syntaxe ne fonctionne avec Access (mais c la bonne au niveau du sql ansi)

Reply

Marsh Posté le 29-09-2004 à 10:02:25    

j'en sais rien, j'ai jamais utilisé Access, mais il doit y avoir un équivalent ...
 
Ici :  
 
http://cerig.efpg.inpg.fr/tutoriel [...] chap20.htm
 
on peut lire :
 
"Dans Access, la syntaxe des jointures gauche et droite est simplifiée en LEFT JOIN et RIGHT JOIN, comme le montrent les deux exemples suivants :  
 
SELECT Nom, Prénom, Adresse, commune, [code postal]
FROM Personnes LEFT JOIN Communes ON Communes.code_commune = Personnes.Code_commune;"
 
Donc c'est quand même proche de ce que j'ai mis plus haut, non ?

Reply

Marsh Posté le 29-09-2004 à 10:33:23    

Oui mais il n'y a qu'une jointure ds ton exemple, apparament c avec plusieurs que ca change. Sinon j'ai trouvé la solution il me fallait faire des jointure externe right au lieu de left en fait ..
 
SELECT * FROM ESPECE RIGHT JOIN (COM_REJ RIGHT JOIN ECHANTILLON ON COM_REJ.CODECR = ECHANTILLON.CODECR) ON ESPECE.CODEESPE = ECHANTILLON.CODEESPE"

Reply

Marsh Posté le 29-09-2004 à 11:29:44    

ouais donc c'était pas vraiment un problème de syntaxe, mais plus de compréhension des résultats que tu voulais. :)

Reply

Marsh Posté le 29-09-2004 à 11:39:53    

en fin de compte oui, Merci encore a access pr son message d'erreur explicite !!  
"Erreur de syntaxe ds l'operation JOIN"  

Reply

Marsh Posté le 29-09-2004 à 12:02:25    

Plus ça va, et plus je me rends compte à quel point Oracle c'est de la merde en barre...
 
Pour info, Oracle ne sait pas faire en cascade deux jointures externes.
 
Quel SGBD de daube, MySQL va finir par être meilleur, c'est pour dire ! En tout cas, Access c'est déjà fait, il est plus puissant qu'Oracle :lol:

Reply

Marsh Posté le 29-09-2004 à 12:02:25   

Reply

Marsh Posté le 29-09-2004 à 12:32:13    

Qu'appelles-tu 2 jointures externes "en cascade" ?
 
Qqch du genre :
 
SELECT * FROM TABLE1, TABLE2, TABLE3
WHERE TABLE1.ID1 = TABLE2.ID1 (+)
AND TABLE1.ID2 = TABLE3.ID2 (+);
 
???

Reply

Marsh Posté le 29-09-2004 à 13:31:48    

Oui avec oracle c possible ! ne pas comparer access et oracle car justement ce n'est pas comparable !!

Reply

Marsh Posté le 04-10-2004 à 16:30:00    

Tiens, c'est chelou... Je viens de tester et ça marche...
 
Mmmm... Bah c'est dans quelle condition que ça merde d'habitude ? Faut que je retrouve... En tout cas, j'ai régulièrement le problème et ça me lourde énormément à chaque fois.

Reply

Marsh Posté le 06-10-2004 à 12:26:01    

Argh, ça y est, je viens de retomber sur mon truc qui merde avec Oracle :
 
select count(*)  
--    pro.codpro, pro.qotite, pro.coduni, pro.motcle, pro.qtemin, pro.poids, pro.haute, pro.large, pro.longue, pro.volume, pro.refpro, pro.poidsnet, pro.codpay, pro.bt, pro.ecat,
--    prm.codlan, prm.nompro, prm.txtpro,
--    nvl(brd.name, 'Other'),
--     protie.sigtie, protie.codprotie
from news, protie, brd, prm, pro
where prm.codsoc = pro.codsoc
and prm.codpro = pro.codpro  
and brd.codsoc(+) = pro.codsoc
and brd.brand(+) = pro.brand
and protie.codsoc(+) = pro.codsoc
and protie.codpro(+) = pro.codpro  
and news.codsoc(+) = pro.codsoc
and news.typnew(+) = 'PRO'
and news.codlan(+) = prm.codlan
and news.codpro(+) = pro.codpro
and news.active(+) = 'Y'
 
Erreur sur "news.codlan(+) = prm.codlan"
=> Une table ne peux faire d'outer join que sur une seule autre table.
 
Avec SQL Server, j'avais eu ce problème, mais la bidouille pour y pallier est extrêment simple, contrairement à Oracle où c'est la merde.

Reply

Marsh Posté le 06-10-2004 à 12:29:43    

:heink:
 
Ha ben en fait si, on peut y pallier facilement aussi ici...
 
select *
from news, (
select pro.codsoc, pro.codpro, pro.qotite, pro.coduni, pro.motcle, pro.qtemin, pro.poids, pro.haute, pro.large, pro.longue, pro.volume, pro.refpro, pro.poidsnet, pro.codpay, pro.bt, pro.ecat,
    prm.codlan, prm.nompro, prm.txtpro,
    nvl(brd.name, 'Other'),
    protie.sigtie, protie.codprotie
from protie, brd, prm, pro
where prm.codsoc = pro.codsoc
and prm.codpro = pro.codpro  
and brd.codsoc(+) = pro.codsoc
and brd.brand(+) = pro.brand
and protie.codsoc(+) = pro.codsoc
and protie.codpro(+) = pro.codpro  
) tmp
where news.codsoc(+) = tmp.codsoc
and news.typnew(+) = 'PRO'
and news.codlan(+) = tmp.codlan
and news.codpro(+) = tmp.codpro
and news.active(+) = 'Y'
 
Ca marche comme sur des roulettes, et c'est même pas lent :D
 
(enfin... si on fait abstraction que la requête retourne plus 125 000 000 000 de lignes  :whistle:  J'ai du me planter dans un coin, bon, vais bouffer j'ai faim, peut pas réfléchir le ventre vide :D)


Message édité par Arjuna le 06-10-2004 à 12:31:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed