Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2874 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  pb SQL : Jointure externe (plusieurs)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb SQL : Jointure externe (plusieurs)

n°859324
ronando82
Posté le 28-09-2004 à 17:43:18  profilanswer
 

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

mood
Publicité
Posté le 28-09-2004 à 17:43:18  profilanswer
 

n°859434
Beegee
Posté le 28-09-2004 à 20:27:58  profilanswer
 

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

n°859482
Tamahome
⭐⭐⭐⭐⭐
Posté le 28-09-2004 à 21:34:08  profilanswer
 

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 /人◕ ‿‿ ◕人\
n°859507
Beegee
Posté le 28-09-2004 à 21:59:07  profilanswer
 

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

n°859635
ronando82
Posté le 29-09-2004 à 08:57:47  profilanswer
 

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

n°859688
Beegee
Posté le 29-09-2004 à 10:02:25  profilanswer
 

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 ?

n°859720
ronando82
Posté le 29-09-2004 à 10:33:23  profilanswer
 

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"

n°859826
Beegee
Posté le 29-09-2004 à 11:29:44  profilanswer
 

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

n°859840
ronando82
Posté le 29-09-2004 à 11:39:53  profilanswer
 

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

n°859870
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-09-2004 à 12:02:25  profilanswer
 

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:

mood
Publicité
Posté le 29-09-2004 à 12:02:25  profilanswer
 

n°859897
Beegee
Posté le 29-09-2004 à 12:32:13  profilanswer
 

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 (+);
 
???

n°859975
ronando82
Posté le 29-09-2004 à 13:31:48  profilanswer
 

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

n°864357
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-10-2004 à 16:30:00  profilanswer
 

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.

n°865925
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-10-2004 à 12:26:01  profilanswer
 

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.

n°865927
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-10-2004 à 12:29:43  profilanswer
 

: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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  pb SQL : Jointure externe (plusieurs)

 

Sujets relatifs
multiplication entre plusieurs tables[SQL-ADODB] Insérer en batch dans base SQL via AT
Affichage de plusieurs pages incluses[sql pgpmyadmin] probleme de connection a la base
SQL : Cast d'un long en varchar2problème pour changer de place un fichier log sous SQL server 2000 ...
[SQL] Comment éviter une division par 0 (zéro) --> résolu par DECODE()insertion de données dans une table sql
Mise a jour automatique de table SQL, Help plz...Pb : You have an error in your SQL syntax ... arghhhhh!
Plus de sujets relatifs à : pb SQL : Jointure externe (plusieurs)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR