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 :

Accéder à la valeur d'une table liée


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut Accéder à la valeur d'une table liée
    Bonjour voici mon problème.

    J'ai deux tables qu'on va appeler T1 et T2.

    Dans T1 j'ai T1_id , T1_name et T2_id en colonnes
    Dans T2 j'ai T2_id et T2_name en colonnes.

    J'aimerai savoir la syntaxe d'un SELECT pour obtenir le T2_name selon T1_id

    Sachant que j'ai au préalables déclaré dans les options de T1 que T1.T2_id et T2.T2_id sont liée ( Clef externe ).

    Des idées ?


    Merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Est ce que c'est quelque chose comme ca qu'il te faut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T2.T2_name, T1.T1_id from T1 T1, T2 T2 where T2.T2_id = T1.T2_id;
    Bonne journée à toi.

  3. #3
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Hello, déjà merci pour l'aide. Alors oui cependant dans mon where j'aimerai que cela dépende de T1.T1_id. Pour qu'en gros dans mon code C# derrière je puisse envoyer dans le requête l'ID de T1.

    En gros j'aimerai la même requête que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T1.T2_id FROM T1 WHERE T1.T1_id = "42"
    Sauf que la , cette requête me retourne donc T2.T2_id, hors j'aimerai éviter de refaire une requête derrière pour avoir le T2.T2_name correspondant au T1.T2_id/T2.T2_id.


    J'aimerai une requête comme celle ci ( qui ne marche pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T2.T2_name FROM T1 WHERE T1.T1_id  = "42"
    Sauf que la le champs T2.T2_name est inconnu dans WHERE clause.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    D'accord, si j'ai bien compris il te suffit d'ajouter une condition à la clause WHERE, simplement avec un AND :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T2.T2_name, T1.T1_id from T1 T1, T2 T2 where T2.T2_id = T1.T2_id AND T1.T1_id = "42";
    Si tu ne veux pas afficher la colonne T1_id dans tes résultats il suffit de l'enlever de la requête.

  5. #5
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Ok je viens d'essayer ca marche bien, J'ai juste deux trois questions.

    Pourquoi c'est nécessaire d'écrire le T2.T2_id = T1.T2_id entre le WHERE et le Clause alors que cette information c'est selon moi l'objectif de la déclaration de la clef externe dans les paramètre de la table ? Je sais pas si je suis clair mais il y une chose que je pige pas

  6. #6
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Alors je ne suis pas un expert mais de ce que je sais, la clé étrangère va t'empêcher d'insérer n'importe quoi dans ta table T2 or la on fait un select donc il faut lui spécifier ce que tu sélectionnes, tu as le droit de sélectionner tout et n'importe quoi, il n'y aura pas de contrôle sur les clé.

  7. #7
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Ok super merci et en soit ce qu'on a fait c'est un peu une jointure contourné ?


    Sinon merci beaucoup pour le coup de pouce

  8. #8
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Oui tout à fait, il y a plusieurs solutions à ton problème.

  9. #9
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut
    Dis-moi, tu as travaillé avec Access, non ?

    L'information que tu veux sélectionner dans T2 n'est pas toujours celle qui correspond à cette relation.
    La table T1 peut être présente plusieurs fois dans la clause FROM.

    Par contre, comme le dit GhorghorBey, la clé étrangère permet un contrôle de cohérence sur les valeurs de la colonne T2_ID dans T1. On précise aussi comment la base de données réagit en cas de suppression dans T2 (interdire la suppression si des données sont liées en T1 ou supprimer en cascade les enregistrements correspondants dans T1).

    La présence de la clé étrangère, basée sur un index, permet d'être performant sur les critères de recherche et bien sûr les jointures.

    Pour lire un enregistrement, cela se discute, mais pour des opérations ensemblistes, il est incomparablement plus efficace de passer par une jointure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T2.T2_name, T1.T1_id from T1 inner join T2 on T2.T2_id = T1.T2_id where T1.T1_id = "42";
    ou LEFT JOIN qui a l'avantage de toujours retourner un enregistrement pour un T1_id existant (avec T2.T2_name à NULL)

  10. #10
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Bonjour en réalité je travail sur un gros Logiciel C# Winform et j'utilise DBeaver en Gestion de la base de données et j'avais souvenir lors qu'il y avait possibilité de crée un index qui crée lui automatiquement une jointure qui relis deux tables. Cela permettait lors du développement d'éviter d'écrire la jointure dans la requête. Mais je pense avoir confondu l'utilité de la clé étrangère et des indexs dans le logiciel de gestion de base

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

Discussions similaires

  1. [AC-2016] Accéder aux champs d'une table liée dans formulaire/état
    Par Asahenn dans le forum Access
    Réponses: 7
    Dernier message: 31/07/2018, 09h39
  2. Intégrer une valeur d'une table liée dans un champ
    Par sardaucar dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/05/2014, 13h30
  3. [2.x] Récupérer la valeur d'une table liée
    Par vanderr dans le forum Symfony
    Réponses: 2
    Dernier message: 24/04/2012, 15h42
  4. récupérer une valeur d'une table excel liée selon requète
    Par guimauve dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/07/2006, 14h48
  5. Réponses: 2
    Dernier message: 21/06/2006, 09h23

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