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 :

Requete très simple : Jointure or not Jointure


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 25
    Points
    25
    Par défaut Requete très simple : Jointure or not Jointure
    Je cherche à faire un truc archi simple mais je ne suis pas bien sûr de moi.

    Table 1

    Nom - ValeursA
    --------------
    Nom1 - ValeurA1
    Nom2 - ValeurA2


    Table 2

    Nom - ValeursB
    --------------
    Nom1 - ValeurB1
    Nom2 - ValeurB2


    Je voudrais récupérer uniquement une ligne:

    NOM1 - VALEURA1 - VALEURB1

    et je me demande si une jointure est une bonne idée dans ce cas ?

    J'avais pensé un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT valeurA
    FROM   Table1 C
    INNER JOIN Table2 T
    ON C.Nom = T.Nom
    Where Nom="Nom1"
    ...mais ça me semble très mauvais.

    Qu'en pensez-vous?
    |-Winx-|

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    je ne pense pas que cela soit mauvais
    apres c'est toujours pour récupérer une seule ligne? tu as beaucoup de lignes par table?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 25
    Points
    25
    Par défaut
    Merci, ça me rassure !

    Oui, c'est toujours pour récupérer une seule ligne !

    Ce seraient des tables de taille faible / moyenne l'une avec sans doute 50 lignes max l'autre avec 100 à 1000 lignes environ.
    |-Winx-|

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 25
    Points
    25
    Par défaut Snif
    Malheureusement, ça ne fonctionne pas.

    Cette requête était d'abord considérée comme ambigüe à cause du 'Nom'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT valeurA
    FROM   Table1 C
    INNER JOIN Table2 T
    ON C.Nom = T.Nom
    WHERE Nom="Nom1"
    Que j'ai remplacé par T.Nom, ça fonctionne mais ça ne me renvoie qu'une seule seule valeur : VALEURA1.

    Je ne suis pas du tout expert en jointure mais je pensais que cette requête allait me rapatrier 'VALEURA1' de ma table 1 mais également Nom1 et 'ValeurB1' de ma table 2...

    Mais ce n'est pas le cas... Pourquoi?
    |-Winx-|

  5. #5
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Peut-être parce qu'il faut les stipuler dans ton critère de sélection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT valeurA, Nom1, ValeurB
    FROM   Table1 C
    INNER JOIN Table2 T
    ON C.Nom = T.Nom
    WHERE T.Nom="Nom1"
    ?
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 25
    Points
    25
    Par défaut
    Oups, en effet, quel bel idiot je fais. Merci !!

    Ca fonctionne, enfin, valeurA et ValeurB reviennent mais comme "Nom" a le même nom dans les deux tables, il ne sait pas lequel choisir !

    J'ai donc changé en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT valeurA, C.Nom, ValeurB
    FROM   Table1 C
    INNER JOIN Table2 T
    ON C.Nom = T.Nom
    WHERE T.Nom="Nom1"
    et ça marche ! Au niveau performance, je me demande par contre si il vaut mieux mettre C.Nom ou T.Nom après le select... Je sais bien que dans ce cas-ci, ça n'a pas d'importance mais si je cherchais à rapatrier un grand nombre de lignes par exemple.
    |-Winx-|

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

Discussions similaires

  1. Jointure ? or not jointure
    Par aure_bobo dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/12/2013, 22h29
  2. Double requete sur un meme champs ou jointure
    Par poipoi90 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/06/2009, 08h46
  3. Probleme de requete avec simple jointure
    Par Setsuna_00 dans le forum Requêtes
    Réponses: 5
    Dernier message: 13/03/2009, 08h40
  4. Réponses: 1
    Dernier message: 14/10/2008, 12h08
  5. Réponses: 10
    Dernier message: 14/12/2006, 12h53

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