Bonjour,
ce que j'ai besoin de faire est un peu tordu, je vous passe les détails du pourquoi, c'est comme ça et il faut absolument que j'y arrive, et il faut que j'y arrive en SQL uniquement (pas le droit de traiter les résultats après dans le programme client).
Disons que j'ai deux tables A et B, avec une clé étrangère de B vers A, plusieurs enregistrements de B peuvent correspondre à un enregistrement de A (0, n) :
Je voudrais sélectionner tous les champs de A (tous les enregistrements), en y ajoutant la première occurence de B trouvée (NULL si aucune correspondance)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 A (ida, champa1, champa2, champa3) B (ida#, champb1)
Au final, je dois avoir un résultat ayant les champs :
Et ce résultat doit retourner EXACTEMENT le même nombre de ligne que dans la table A.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ida, champa1, champa2, champa3, champb1
Il ne faut pas exclure les enregistrements de A n'ayant pas de correspondance dans B (donc j'imagine que c'est une jointure externe ?), et il ne faut avoir que la 1ere occurrence (dans l'ordre de la sélection) de champb1, tant pis s'il y a d'autres correspondances, elles doivent passer à la trappe (et ça je n'ai pas encore trouvé comment faire).
Oui, je sais, c'est tordu ...
Pour l'instant je fais ceci comme requête :
C'est presque bon, sauf que si un enregistrement de A à plusieurs correspondances dans B, j'obtiensw plusieurs lignes dans le résultat (normal).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT A.ida, A.champa1, A.champa2, Achampa3, B.champb1 FROM A LEFT OUTER JOIN B ON A.ida = B.ida
Ce qu'il me faudrait (si ça existait), ça serait quelque chose du genre :
Comment obtenir quelque chose d'équivalent sans traiter le résultat a posteriori ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT A.ida, A.champa1, A.champa2, Achampa3, B.champb1 FROM A LEFT OUTER JOIN B ON A.ida = B.ida LIMIT 1
Merci beaucoup à celui ou celle qui pourra me sauver sur ce coup-là !
(PS : c'est sous SQL Server 2005)






Répondre avec citation





Partager