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 :

Conditions et jointures entre deux tables


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut Conditions et jointures entre deux tables

    J'ai deux tables (fonction et testeur), un testeur est rattaché à une fonction.
    Je veux afficher le libellé de la fonction des testeurs dont le numéro de la fonction est supérieur à 9.

    Voila comment j'ai procédé :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT LibFonction
    FROM `fonction` , `testeur`
    WHERE fonction.NumFonction = testeur.FonctionTesteur
    AND testeur.FonctionTesteur >9

    Cette requête ne me retourne aucun résultat, et pourtant si je fais juste
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT FonctionTesteur
    FROM `testeur`
    WHERE FonctionTesteur >9

    j'ai 89 résultats de retournés... Donc le problème vient de ma requête. Comment faire pour afficher le libellé de la fonction correspondant au numéro (FonctionTesteur) du testeur?


  2. #2
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE fonction.NumFonction = testeur.FonctionTesteur
    cela risque de te retourné 0.

    tes valeurs dans NumFonction sont les meme que dans FonctionTesteur ??

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Oui, les deux champs sont des entiers, et un testeur est rattaché à une fonction (simplement, pour voir la fonction du testeur, on fait FonctionTesteur=NumFonction et ensuite on regarde le LibFonction rattaché au NumFonction).

    Comment faire?

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Je ne vois rien d'anormal dans la requête, si ce n'est qu'avec une jointure normalisée (depuis 1992 quand même !) ce serait mieux :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT f.LibFonction
    FROM fonction f
    INNER JOIN testeur t ON f.NumFonction = t.FonctionTesteur
    WHERE t.FonctionTesteur > 9


    On peut avoir la structure des tables, comme le demandent les règles du forum ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Merci pour vos réponses, en fait le problème était de mon coté, la table fonction ayant été modifiée, je me retrouvai avec des NumFonction sans LibFonction, ce qui causait une erreur...

    J'ai normalisé ma requête, même si c'est la façon ancienne qu'on m'a appris à l'école... Et pourtant, j'y suis encore!

    Pour info, je mets la structure de mes tables :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    CREATE TABLE `fonction` (
      `NumFonction` int(10) unsigned NOT NULL auto_increment,
      `LibFonction` varchar(255) NOT NULL,
      PRIMARY KEY  (`NumFonction`),
      UNIQUE KEY `LibFonction` (`LibFonction`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
     
    CREATE TABLE `testeur` (
      `NumTesteur` int(10) unsigned NOT NULL auto_increment,
      `CiviliteTesteur` enum('Mr','Mme','Mlle') NOT NULL,
      `NomTesteur` varchar(255) NOT NULL,
      `PrenomTesteur` varchar(255) default NULL,
      `FonctionTesteur` int(10) unsigned NOT NULL,
      `MetierTesteur` int(10) unsigned NOT NULL,
      `SocieteTesteur` int(10) unsigned NOT NULL,
      `NumTelTesteur` char(14) NOT NULL,
      `NumMobileTesteur` char(14) default NULL,
      `EmailTesteur` varchar(255) default NULL,
      `CommentaireTesteur` text,
      `NbParticipations` int(10) unsigned NOT NULL default '0',
      `NbSollicitations` int(10) unsigned NOT NULL default '0',
      `enCampagne` tinyint(1) NOT NULL default '0',
      `surListeNoire` tinyint(1) NOT NULL default '0',
      PRIMARY KEY  (`NumTesteur`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1074 DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

  6. #6
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par floctc Voir le message
    J'ai normalisé ma requête, même si c'est la façon ancienne qu'on m'a appris à l'école... Et pourtant, j'y suis encore!
    C'est lamentable !
    Pas que tu sois encore à l'école mais qu'on y enseigne encore cette syntaxe obsolète !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Oui, je suis d'accord! Mais maintenant que j'ai compris comment fonctionnait la nouvelle syntaxe avec INNER JOIN, je vais essayer de l'appliquer tout le temps!

    Y compris pendant les interros

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/07/2014, 14h13
  2. Jointure entre deux tables et conditions multiples
    Par itklif2 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 13/03/2013, 17h52
  3. [MySQL] Jointure entre deux tables
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/10/2005, 19h55
  4. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 16h11
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 15h50

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