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

Requêtes MySQL Discussion :

Jointure de 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut Jointure de 2 tables
    Bonjour,

    J'ai 2 tables:

    appel_mag_ligne avec comme colonnes idcmd, code, empl

    mag_corresp avec comme colonne id, empl, zone


    Lorsque je cherche une commande dans appel_mag_ligne, je peux avoir plusieurs lignes avec différent codes et différents emplacement.
    Mais pour chaque ligne je voudrais récupérer la zone de la table mag_corresp.

    J'imagine que la requête ne doit pas être très compliquée, mais je n'ai pas suffisamment de connaissance

    Pouvez-vous me diriger vers la bonne solution?

    Merci bcp

    Xavier
    Xavier

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Quelle(s) requête(s) avez vous essayée(s), quel est le résultat obtenu, y a-t-il un message d'erreur, lequel ?

  3. #3
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM `appel_mag_ligne`   WHERE `empl` = (SELECT zone FROM mag_corresp WHERE emplacement = appel_mag_ligne.empl)
    Aucun résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM `appel_mag_ligne`   INNER JOIN mag_corresp  ON  appel_mag_ligne.empl = mag_corresp.emplacement  WHERE appel_mag_ligne.idcmd = '101'
    Aucun résultat alors que je devrais en avoir 3
    Xavier

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonsoir,

    Dans le premier post, la table "mag_corresp" est décrite avec une colonne "empl".
    J'ai supposé que c'était la colonne permettant de faire la jointure avec la table "appel_mag_ligne" qui possède une colonne de même nom
    Mais dans votre requête, vous utilisez une colonne "emplacement" non décrite dans le le premier post... quelles sont les vrais noms des colonnes ?

    Ensuite, si la zone est facultative, alors il faut utiliser une jointure externe (OUTER JOIN)

    Donc, si la colonne de jointure est bien "empl" comme je le suppose, la requete devrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select ML.idcmd
         , ML.code
         , ML.empl
    from appel_mag_ligne  as ML
    left outer join
         mag_corresp      as MC
      on MC.empl = ML.empl
    where ML.appel_mag_ligne.idcmd = '101'

  5. #5
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    effectivement, erreur dans le nom d'un des champs:

    appel_mag_ligne avec comme colonnes idcmd, code, empl

    mag_corresp avec comme colonne id, emplacement, zone


    J'ai testé votre requête, j'ai bien les résultats, mais je n'ai pas dans le retour le champs zone correspondant.
    Xavier

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    il suffit d'ajouter la colonne manquante dans ma requête, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select ML.idcmd
         , ML.code
         , ML.empl
         , MC.zone
    from appel_mag_ligne  as ML
    left outer join
         mag_corresp      as MC
      on MC.emplacement = ML.empl
    where ML.appel_mag_ligne.idcmd = '101'

  7. #7
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Merci beaucoup pour votre aide, c'est parfait.

    Juste une dernière chose:

    MC.emplacement contient le nom d'un emplacement (ex. D25)

    Mais ML.empl peut se décliner en D25_1, D25_2 etc...

    Comment dans une requête je peux prendre une partie de la chaine entre le premier caractère et le séparateur '_'?
    Xavier

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Si la position du séparateur "_" est variable alors utilisez
    select substr(ma_colonne, 1, locate ('_', ma_colonne)-1)).

    Si elle est fixe, c'est plus simple. Par exemple si c'est toujours en position 4
    select substr(ma_colenne, 1, 3).

    Mais si le but est de faire une jointure entre les deux tables, les performances seront très mauvaises

    D'ailleurs, ce suffixe est visiblement une erreur de modélisation : il devrait y avoir deux colonnes, la première pour l'emplacement (par exemple D25) l'autre pour le sous-emplacement (par exemple 1), le séparateur "_" devenant inutile.
    Avec cette modélisation, il devient inutile de bidouiller par des substring les deux valeurs et les performances sont préservées

  9. #9
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Merci beaucoup pour votre aide.
    Je tiens compte de la dernière remarque

    A bientôt
    Xavier

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

Discussions similaires

  1. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50
  2. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 15h03
  3. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 11h20
  4. Jointure entre 2 tables et OR
    Par PyRoFlo dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/02/2004, 18h42
  5. Jointure sur 2 tables de bases différentes
    Par Celina dans le forum Langage SQL
    Réponses: 10
    Dernier message: 10/11/2003, 11h56

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