[ACCESS] Fusion de 2 requêtes SQL

Fusion de 2 requêtes SQL [ACCESS] - SQL/NoSQL - Programmation

Marsh Posté le 07-08-2013 à 11:16:41    

Bonjour la communauté Hardware.fr,
je me penche depuis plusieurs jours sur des vieilles bases Access que je dois réactualiser.
Et je bloque sur une requête SQL que je souhaite insérer dans Access :
 
Select IdA, NomA, PrenomA, NomB, PrenomB
FROM PersonnesA  PA LEFT JOIN PersonnesB PB ON PB.IdA = (  
            SELECT  TOP 1 PB2.IdA  
            FROM PersonnesB PB2  
            WHERE PA.IdA = PB2.IdA);
 
Cela sort une erreur de syntaxe
car apparemment Access ne supporte pas le fait d'écrire : ... ON PB.IdA = ( SELECT ...)
 
Connaissez-vous une équivalence syntaxique sur Access pour obtenir le même résultat ?
Merci pour votre aide.
 
-----
Edit :
 
Pour plus d'informations :
la structure des mes tables ressemblent à :
 
PersonneA

Code :
  1. IdA#      NomA   PrenomA
  2. 40        André   Dupont
  3. 42        Malo    Arto
  4. 45        Losi    Jean


 
PersonneB

Code :
  1. IdB#      NomB   PrenomB            IdA (clé étrangère)
  2. 1         Gis     Julie             42
  3. 2         Jus     Alice             45
  4. 3         Kis     Chris             42
  5. 4         Juis    Gisèle            40
  6. 5         Pos     Aline             45


 
 
Et je souhaite donc avori :

Code :
  1. IdA         NomA   PrenomA           NomB   PrenomB
  2. 40          André   Dupont           Juis   Gisèle
  3. 42          Malo    Arto             Gis    Julie
  4. 45          Losi    Jean             Jus    Alice


 
 
Mon objectif est de ne pas avoir de doublons sur les IdA dans mon résultat.
Quitte à perdre mes autres associations PersonnesB (ça ne pose pas de problème)


Message édité par bibin le 07-08-2013 à 12:34:43
Reply

Marsh Posté le 07-08-2013 à 11:16:41   

Reply

Marsh Posté le 07-08-2013 à 12:28:58    

Bonjour !
 
Logiquement, la syntaxe en sql est  
 
SELECT XXX from TTT where AAA in (select xxx from ttt)
 
Bonne continuation !

Reply

Marsh Posté le 07-08-2013 à 14:13:51    

Je suis d'accord, le mieux est de mettre un IN à la place du = avant la sous-requête.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 07-08-2013 à 14:13:56    

Merci beaucoup :)
pour m'avoir remis sur le droit chemin.
 
SELECT PA.IdA, PA.NomA, PA.PrenomA, First(PB.IdB), First(PB.NomB)
FROM PersonnesA AS PA LEFT JOIN PersonnesB AS PB ON PA.IdA= PB.IdA
GROUP BY PA.IdA, PA.NomA, PA.PrenomA
 
Je ne sais pas si j'ai le droit,
mais ce tuto m'a permis de m'en sortir : http://cerig.efpg.inpg.fr/tutoriel [...] chap15.htm
 
a suffit pour répondre exactement à ma question.
Bonne journée !


Message édité par bibin le 07-08-2013 à 14:17:51
Reply

Marsh Posté le 07-08-2013 à 14:26:24    

First n'est pas une instruction qu'on trouve sur tous les sgbd :/ L'autre requête avait le mérite d'être portable sur tout sgbd supportant les sous-requêtes...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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