IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Use correlation names to distinguish them.


Sujet :

MS SQL Server

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Use correlation names to distinguish them.
    Bonjour

    Je ne suis toujours pas grand expert en SQL et jointures
    Quand j'essaye d'effectuer le query ci-apres j'ai un message d'erreur

    Tables or functions 'Societes_tbl' and 'Societes_tbl' have the same exposed names. Use correlation names to distinguish them.
    Quelqu'un aurais-il la gentillesse et la patience de m'expliquer la raison precise de ce problème pour que je puisse comprendre comment l'eviter.
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT     Societes_tbl.SociID,
               Societes_tbl.SociNom, Societes_tbl.SociTel,
               Adresses_tbl.AdrsID, Adresses_tbl.AdrsLigne1,
               Adresses_tbl.AdrsLigne2, 
               Personnes_tbl.PersID,
               Personnes_tbl.PersNom,
               Personnes_tbl.PersPrenom
    FROM       Societes_tbl
    LEFT OUTER JOIN  Adresses_tbl ON Societes_tbl.SociID = Adresses_tbl.AdrsSociID
    RIGHT OUTER JOIN Societes_tbl ON Link_Contacts_tbl.CtacSociID = Societes_tbl.SociID 
    INNER JOIN       Link_Contacts_tbl ON Personnes_tbl.PersID = Link_Contacts_tbl.CtacPersID
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Pour faire une requête appelant plusieurs fois la même table, il faut des alias pour lui spécifier de quelle table on parle.

    J'ai l'impression que dans votre cas, c'est plutôt un problème de jointure qu'un problème de syntaxe. Peut-être ai-je mal compris? Que voulez_vous faire exactement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT     Societes_tbl1.SociID,
               Societes_tbl1.SociNom, Societes_tbl1.SociTel,
               Adresses_tbl.AdrsID, Adresses_tbl.AdrsLigne1,
               Adresses_tbl.AdrsLigne2, 
               Personnes_tbl.PersID,
               Personnes_tbl.PersNom,
               Personnes_tbl.PersPrenom
    FROM       Societes_tbl AS Societe_tbl1
    LEFT OUTER JOIN  Adresses_tbl ON Societes_tbl1.SociID = Adresses_tbl.AdrsSociID
    RIGHT OUTER JOIN Societes_tbl AS Societe_tbl2 ON Link_Contacts_tbl.CtacSociID = Societes_tbl.SociID 
    INNER JOIN       Link_Contacts_tbl ON Personnes_tbl.PersID = Link_Contacts_tbl.CtacPersID
    A bove ante, ab asino retro, a stulto undique caveto

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci de ton aide

    C'est bien un probleme de jointure

    Je ne comprends pas bien la necessité de faire des alias et surtout OU les utiliser dans ce cas ci
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RIGHT OUTER JOIN Societes_tbl ON Link_Contacts_tbl.CtacSociID = Societes_tbl.SociID
    Il est fait référence à une deuxième table Societes_tbl. Le SGBD ne peut pas savoir lors de l'appel de Societes_tbl.SociID (et aussi dans le SELECT) s'il s'agit de la table du FROM ou de la table qui vient d'être jointurée.

    Il n'empêche que cette requête me semble bien complexe. Je ne suis pas sûre que les jointures à gauches et à droites soient nécessaires.

    Si vous souhaitez afficher les informations d'une société, ses adresses et les noms des contacts de cette société, voici la requête que je vous propose (sous réserve que j'ai bien deviné la composition des tables)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT     Societes_tbl.SociID,
               Societes_tbl.SociNom, Societes_tbl.SociTel,
               Adresses_tbl.AdrsID, Adresses_tbl.AdrsLigne1,
               Adresses_tbl.AdrsLigne2, 
               Personnes_tbl.PersID,
               Personnes_tbl.PersNom,
               Personnes_tbl.PersPrenom
    FROM       Societes_tbl
    INNER JOIN  Adresses_tbl ON Societes_tbl1.SociID = Adresses_tbl.AdrsSociID
    INNER JOIN Link_Contacts_tbl ON Link_Contacts_tbl.CtacSociID = Societes_tbl.SociID 
    INNER JOIN  Personnes_tbl ON Personnes_tbl.PersID = Link_Contacts_tbl.CtacPersID
    De manière générale, je préfère les jointures écrites de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT table1.champ1 ...
    FROM table1,table2
    WHERE table1.champ1=table2.champ1
    A bove ante, ab asino retro, a stulto undique caveto

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Arkhena

    Les LEFT et RIGHT outer Join sont nécessaires !

    Une societé n'ayant pas toujours une adresse
    Et une société n'ayant pas forcément une personne de contact

    Un INNER JOIN va exclure ces sociétés !


    La syntaxe que tu propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT table1.champ1 ...
    FROM table1,table2
    WHERE table1.champ1=table2.champ1
    Peut sans doute fonctionner pour un INNER JOIN (mais je ne suis pas certain que le SQL Engine l'optimisera de la meme maniere qu'un join)

    Mais cete Syntaxe ne peut pas etre appliquée pour un OUTER JOIN

    Des avis dans l'équipe ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    OK pour les jointures à gauche et à droite mais ça, je maîtrise pas trop
    A bove ante, ab asino retro, a stulto undique caveto

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/10/2013, 01h56
  2. Réponses: 0
    Dernier message: 07/12/2011, 22h49
  3. Use/create a range name
    Par Benjijmin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/04/2010, 15h01
  4. VBS : Recherche DN (Distinguished Name)
    Par parker13 dans le forum VBScript
    Réponses: 2
    Dernier message: 02/09/2006, 14h11
  5. Réponses: 7
    Dernier message: 07/07/2006, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo