But : récupérer un seul numéro de téléphone d'un client.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT * FROM tClient LEFT JOIN ( SELECT TOP 100 PERCENT Client_ID,tTelephone.Numero, tTelephone.Poste FROM tClient_Telephone INNER JOIN tTelephone ON tClient_Telephone.Telephone_ID=tTelephone.Telephone_ID ORDER BY Principal DESC ) vTelephone ON vTelephone.Client_ID=tClient.Client_ID
si vous vous demandez pourquoi je fais un order by principal, c'est parce que plusieurs numéros de téléphone peuvent être principaux pour le même client (par exemple un client peut avoir deux fixes dont un principal et trois numéros de fax dont un principal), alors l'order by permet de remonter ces enregistrements dans la vue vTelephone.
Ici j'aimerai rajouter quelque chose comme SELECT TOP 1, qui ferait extrèmement bien l'affaire... mais où le mettre?
Car changer "SELECT TOP 100 PERCENT" par "SELECT TOP 1" ne fonctionnera pas car l'intérieur du left join ne contiendra qu'un enregistrement (j'ai testé) et donc le join ne se fera que dans le cas où on aura le premier client et le premier num de tél qui correspondent.
Et puis je me suis dit souvent "ah oui si je fais un distinct sur le client_id il ne me remettra pas deux fois le même client dans la table finale", mais le distinct ne s'applique que sur tous les champs du select on dirait... bref cela ne m'arrange pas...
Je suis souvent coincé avec ce genre de problème... j'ai du mal comprendre quelque chose en sql pour ce genre de sous-requête avec order by et select top
Merci d'avance.
Partager