SELECT avec 2 liens FK vers la même table

Résolu
cs_Jaxom Messages postés 29 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 22 mars 2013 - 30 juin 2009 à 17:52
cs_Jaxom Messages postés 29 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 22 mars 2013 - 2 juil. 2009 à 12:16
Bonjour,


J'ai plusieures tables



Tbl_Affilies qui contient:

Affilies_Id

Affilies_Nom_commercial

Affilies_Rue_commercial_Id

Affilies_Nom_Prive

Affilies_Rue_Prive_Id

....



Tbl_Rue qui contient

Rue_Id

Rue_Nom

Rue_CP_Id

...



Tbl_Localite qui contient

Localite_Id

Localite_Nom

Localite_Pays_Id

...



Tbl_Pays qui contient

Pays_Id

Pays_Nom

...



Ouf, c'est tout



Affilies_Rue_commercial_Id est une FK de la table Tbl_Rue etc...

J'ai donc 2 FK dans ma table Tbl_Affilies qui "pointent" sur la même table...


C'est là que je coince comment je fait un SELECT qui va me donner les adresses complètes:


Affilies_Id

Affilies_Nom_commercial

Affilies_Rue_commercial_Id

Rue_Nom

Localite_Id

Localite_Nom

Pays_Nom

Affilies_Nom_Prive

Affilies_Rue_Prive_Id

Rue_Nom

Localite_Id

Localite_Nom

Pays_Nom




Merci d'avance pour votre savoir à tous.

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 juin 2009 à 19:44
FK : C'est quoi ?
Très mauvaise idée d'avoir associé des tables en cascade.
Il aurait mieux valu déclarer Rue_Id, CP_Id, Localite_Id et Pays_Id à la fiche principale.
Bref, quand tu as deux sources pouvant "taper" dans une même table, il suffit de déclarer plusieurs fois cette table.


Essaye ça :
 Select TA.Affilies_Id,
        TA.Affilies_Nom_commercial,
        TB.Rue_Nom,
        TC.Localite_Nom,
        TD.Pays_Nom,
        TA.Affilies_Nom_Prive,
        TE.Rue_Nom,
        TF.Localite_Nom,
        TG.Pays_Nom
   From Tbl_Affilies TA,
        Tbl_Rue TB,
        Tbl_Localite TC,
        Tbl_Pays TD,
        Tbl_Rue TE,
        Tbl_Localite TF,
        Tbl_Pays TG
  Where TA.Affilies_Rue_commercial_Id = TB.Rue_Id
    And TB.CP_Id = TC.Localite_Id
    And TC.Localite_Pays_Id = TD.Pays_Id
    And TA.Affilies_Rue_Prive_Id = TE.Rue_Id
    And TE.CP_Id = TF.Localite_Id
    And TF.Localite_Pays_Id = TG.Pays_Id

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés


<hr />
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jaxom Messages postés 29 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 22 mars 2013
2 juil. 2009 à 12:16
Hello,

Merci pour ta réponse Jack

Mais pourquoi:

Très mauvaise idée d'avoir associé des tables en cascade

Pour être complet j'ai fait une cascade car les localité et les pays interviennent dans plusieures tables; par exemple, j'ai des codes postaux de domicile et de distribution de courrier (en fait pour la poste en Belgique on a une adresse physique et une adresse du bureau de poste distributeur du courrier).

Bref, il m'a semblé (mais bon je ne suis pas un génie non plus) opportun de séparer les Code postaux et les pays pour faire des dropdownlist dans mes formulaires d'encodage. A partir de là, je me suis dit que dans les tables affiliés, prospects,bureau provinciaux, distributeurs... qui gèrent toutes des adressess, de ne pas mettre les adresses complète en dur dans les tables puisque elles sont dajà là en suivant les liaisons. De plus, si on mets une adresse à jour (genre un Code postal qui change par exemple) je ne dois pas m'occuper de mettre à jour quoi que ce soit dans mes différentes table.

Voila donc mon raisonement... maintenant, le but de la vie c'est progresser ^^ du coup, je suis à l'écoute de toute remarque de ta part ^^

Sur ce merci encore pour ton aide.

Philippe
0
Rejoignez-nous