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

Langage SQL Discussion :

Requête clé étrangère sur même table


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Requête clé étrangère sur même table
    Bonjour à tous,

    J'ai une table T, avec les colonnes ID_Employé (clé primaire), NOM_Employé, et ID_Manager (clé étrangère sur la même table).
    Pour afficher les données de la table, je fais :
    SELECT ID_Employé, NOM_Employé, ID_Manager FROM TSeulement, au lieu d'afficher l'ID du manager, j'aimerais afficher son NOM.
    Quelle est la requête pour ça?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Première chose : de quel SGBD parle t-on ? Apparemment il s'agit de votre premier message , avez vous lu les règles de base pour ce forum ? Selon les SGBD vous n'aurez pas forcément la même réponse .


    Mais, je vous conseille surtout de lire le tutoriel sur les jointures (l'on peut très bien faire une jointure d'une table sur elle même pour peu d'utiliser des nom d'alias) et aussi les cours SQL.
    Il y a aussi la possibilité d'utiliser des SELECT imbriqués (SELECT CHAMP1,SELECT UNAUTRECHAMP FROM UNETABLE WHERE ..., CHAMP2 FROM UNETABLE) mais alors ça , j'aime pas du tout
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre averti
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Points : 304
    Points
    304
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT employe.ID_Employé AS ID_Employé, employe.NOM_Employé AS NOM_Employé, manager.ID_Employé AS ID_Manager, manager.NOM_Employé AS NOM_Manager
    FROM T AS employe
    JOIN T AS manager ON employe.ID_Manager = manager.ID_Employé

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par bhamp0 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT employe.ID_Employé AS ID_Employé, employe.NOM_Employé AS NOM_Employé, manager.ID_Employé AS ID_Manager, manager.NOM_Employé AS NOM_Manager
    FROM T AS employe
    JOIN T AS manager ON employe.ID_Manager = manager.ID_Employé
    Je doute que le nom du manager soit dans la meme table, sinon la question ne se poserait pas

    Il faudrait plutôt construire une requête de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT T1.ID_Employé, 
          ,T1.NOM_Employé, 
          ,T2.ID_Manager, 
          ,T2.NOM_Manager
    FROM employe as T1
    inner join manager as T2 
    ON T2.ID_Employé=T1.ID_EMPLOYE
    Si l'on veut afficher les employés même si le nom du manager n'est pas trouvé dans T2, alors il faut remplacer l'inner join par un left outer join

  5. #5
    Membre éclairé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Points : 747
    Points
    747
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Je doute que le nom du manager soit dans la meme table, sinon la question ne se poserait pas
    Ca a pourtant l'air d'être le cas selon la description faire par le posteur initial. (un manager est un employé, lui aussi).

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par valaendra Voir le message
    Ca a pourtant l'air d'être le cas selon la description faire par le posteur initial. (un manager est un employé, lui aussi).
    C'est possible en effet s'il s'agit d'une relation réflexive genre composant/composé

    Un aperçu du modèle de données serait le bien venu

  7. #7
    Membre averti
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Points : 304
    Points
    304
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Je doute que le nom du manager soit dans la meme table, sinon la question ne se poserait pas
    Le post initial dit "clé étrangère sur la même table". J'en ai conclu que ID_Manager pointait vers un ID_Employé sur la table T ...

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    La solution proposée par bhamp0 dans son post ne permettait d'obtenir que les employés ayant un manager , j'opterais donc plutôt pour un LEFT JOIN permettant d'obtenir tous les employés (même ceux n'ayant pas de manager) . Plus complexe (et donc plus drôle) serait d'essayer une requête permettant d'obtenir la table en ordre hiérarchique (un manager pouvant avoir un manager qui lui même a un manager etc....
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre averti
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Points : 304
    Points
    304
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    La solution proposée par bhamp0 dans son post ne permettait d'obtenir que les employés ayant un manager , j'opterais donc plutôt pour un LEFT JOIN permettant d'obtenir tous les employés (même ceux n'ayant pas de manager) . Plus complexe (et donc plus drôle) serait d'essayer une requête permettant d'obtenir la table en ordre hiérarchique (un manager pouvant avoir un manager qui lui même a un manager etc....
    Ca existe des employés sans manager ? A part le CEO ...

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par bhamp0 Voir le message
    Ca existe des employés sans manager ? A part le CEO ...
    je pense que non , mais j'ai l'habitude des utilisateurs, donner tous les renseignements n'est pas toujours leur point fort
    par exemple dans cette discussion il me semble que l'on ne sait toujours pas de quelle SGBD il s'agit (tu rétorqueras qu'il n'y a pas non plus de formulaire )

    Admettons que dans la table il y ait plusieurs entreprises et donc PDG et qu'un PDG soit considéré comme un employé (selon le nom de la table)
    ou encore que justement le PDG ne soit pas considéré comme un employé dans ce cas plusieurs managers seraient sans manager CQFD
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Désolé, j'ai effectivement oublié de préciser, le SGBD est SQL Server, et la réponse de bhamp0 est bonne.
    escartefigue, c'est vrai qu'après seulement qqes jours sur sql je me rend compte que la question est gnangnan, mais je suis un débutant de chez débutant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/07/2011, 16h49
  2. Requête SQL : Jointure sur 3 tables - Bd Access 1997 & Delphi 7
    Par Didier100 dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/12/2007, 09h57
  3. Réponses: 4
    Dernier message: 25/11/2007, 10h13
  4. Trigger avec update sur même table
    Par Thig dans le forum PL/SQL
    Réponses: 7
    Dernier message: 31/08/2007, 14h45
  5. [MySQL] 2 LEFT JOIN sur même table
    Par bupocirk dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/07/2007, 16h53

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