OVH Cloud OVH Cloud

Petit problème avec une requête

2 réponses
Avatar
Denis P
Bonjour,

J'ai un petit problème avec une requête et j'aurais besoin de vos précieux
conseils pour trouver la solution. J'ai une BD qui me sert pour la gestion
de contact dans laquelle je dois effectuer une requête. Je vais vous donner
la structure de mes tables pour être plus explicite.

Table_contact
con_id 'clé primaire
con_prenom 'prénom du contact
con_nom 'nom du contact

Table_telephone
tel_id 'clé primaire
tel_con_id 'clé étrangère relié à Table_contact
tel_numero 'numéro de téléphone du conatct
tel_typ 'type de téléphone du contact (exemple résidence
ou encore cellulaire, etc.)

Table_courriel
cour_id 'clé primaire
cour_con_id 'clé étrangère relié à Table_contact
cour_adresse 'adresse email du contact

Donc ma requête doit s'effectué sur ces 3 tables. Comme de raison un
contact peut avoir plus d'un numéro de téléphone et plus d'une adresse
email. Par contre il est aussi possible qu'il n'ait ni un ni l'autre, mais
seulement une adresse postal qui est conservé dans une autre table, dont je
n'ai pas besoin pour cette requête.

Donc le résultat que je souhaite obtenir est d'afficher chacun des contacts
avec le premier numéro de téléphone inscrit et la première adresse email
inscrite(s'il en possède, sinon seulement le prénom et le nom).

Voici donc ce que j'ai fait jusqu'à présent.

SELECT a.con_id, a.con_prenom, a.con_nom, b.tel_numero, c.cour_adresse
FROM (contact AS a LEFT OUTER JOIN telephone AS b ON b.tel_con_id=a.con_id )
LEFT OUTER JOIN courriel AS c ON c.cour_con_id=a.con_id

Cette requête me donne évidemment tous les contacts avec tous les numéros de
téléphone et toutes les adresses email. Donc ma question est "Comment
dois-je procéder à partir de cette requête pour afficher une seule fois
chaque contact avec le premier numéro de téléphone (s'il en possède plus
d'un) ou s'il n'en possède pas laisser le champ vide et faire la même chose
pour les adresses email ?"

Merci à l'avance pour ceux qui me donneront une piste de solution à ce
problème.

Denis P.

2 réponses

Avatar
Pierre CFI [mvp]
bonjour
pas evident à expliquer, je pense que si ta base une fois compactée et zippée n'est pas trop grosse, envoie la moi, je te ferais (ou
essaierais) de te faire çà
enléve xxx_ à mon adresse

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Denis P" a écrit dans le message de news:
Bonjour,

J'ai un petit problème avec une requête et j'aurais besoin de vos précieux
conseils pour trouver la solution. J'ai une BD qui me sert pour la gestion
de contact dans laquelle je dois effectuer une requête. Je vais vous donner
la structure de mes tables pour être plus explicite.

Table_contact
con_id 'clé primaire
con_prenom 'prénom du contact
con_nom 'nom du contact

Table_telephone
tel_id 'clé primaire
tel_con_id 'clé étrangère relié à Table_contact
tel_numero 'numéro de téléphone du conatct
tel_typ 'type de téléphone du contact (exemple résidence
ou encore cellulaire, etc.)

Table_courriel
cour_id 'clé primaire
cour_con_id 'clé étrangère relié à Table_contact
cour_adresse 'adresse email du contact

Donc ma requête doit s'effectué sur ces 3 tables. Comme de raison un
contact peut avoir plus d'un numéro de téléphone et plus d'une adresse
email. Par contre il est aussi possible qu'il n'ait ni un ni l'autre, mais
seulement une adresse postal qui est conservé dans une autre table, dont je
n'ai pas besoin pour cette requête.

Donc le résultat que je souhaite obtenir est d'afficher chacun des contacts
avec le premier numéro de téléphone inscrit et la première adresse email
inscrite(s'il en possède, sinon seulement le prénom et le nom).

Voici donc ce que j'ai fait jusqu'à présent.

SELECT a.con_id, a.con_prenom, a.con_nom, b.tel_numero, c.cour_adresse
FROM (contact AS a LEFT OUTER JOIN telephone AS b ON b.tel_con_id=a.con_id )
LEFT OUTER JOIN courriel AS c ON c.cour_con_id=a.con_id

Cette requête me donne évidemment tous les contacts avec tous les numéros de
téléphone et toutes les adresses email. Donc ma question est "Comment
dois-je procéder à partir de cette requête pour afficher une seule fois
chaque contact avec le premier numéro de téléphone (s'il en possède plus
d'un) ou s'il n'en possède pas laisser le champ vide et faire la même chose
pour les adresses email ?"

Merci à l'avance pour ceux qui me donneront une piste de solution à ce
problème.

Denis P.




Avatar
NoMail
Denis P a ecrit, Le 15/04/2004 15:58 :
Bonjour,

Denis P.


Par rapport à ta demande j'ai changé le nom de la clé etrangère :

Table_contact
con_id 'clé primaire
con_prenom 'prénom du contact
con_nom 'nom du contact

Table_telephone
tel_id 'clé primaire
con_id 'clé étrangère relié à Table_contact
tel_numero 'numéro de téléphone du conatct
tel_typ 'type de téléphone du contact (exemple résidence
ou encore cellulaire, etc.)

Table_courriel
cour_id 'clé primaire
con_id 'clé étrangère relié à Table_contact
cour_adresse 'adresse email du contact

essai ça :
requete final :
SELECT
First(CON.con_prenom) AS PremierDecon_prenom,
First(CON.con_nom) AS PremierDecon_nom,
First(R_MAIL.cour_adresse) AS PremierDecour_adresse,
First(R_TEL.tel_numero) AS PremierDetel_numero,
First(R_TEL.tel_type) AS PremierDetel_type
FROM
R_TEL RIGHT JOIN (R_MAIL RIGHT JOIN CON ON R_MAIL.con_id = CON.con_id)
ON R_TEL.con_id = CON.con_id
GROUP BY CON.con_id;

R_TEL :
SELECT TEL.tel_numero, TEL.tel_type, CON.con_id
FROM TEL RIGHT JOIN CON ON TEL.con_id = CON.con_id
WHERE (((TEL.tel_numero) Is Not Null));

R_MAIL :
SELECT COUR.cour_adresse, CON.con_id
FROM CON LEFT JOIN COUR ON CON.con_id = COUR.con_id
WHERE (((COUR.cour_adresse) Is Not Null));