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

MySQL Discussion :

problème de resultat de réquête sql avec jointure


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Août 2014
    Messages : 62
    Points : 28
    Points
    28
    Par défaut problème de resultat de réquête sql avec jointure
    Bonjour, je viens vers vous afin de sollicité votre aide pour pour ma requête sql j'ai besoin d'information sur deux tables pendants une période donnée la réquête m'affiche des résultats mes malheurement qui ne sont pas vrai car certain champs sont multiplie
    je vous montre mes deux champs:

    table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE IF NOT EXISTS `mensuelafd` (
      `id` int(20) NOT NULL AUTO_INCREMENT,
      `datedubilan` date DEFAULT NULL,
      `idanimateur` int(20) NOT NULL,
      `precedentsuivie` int(20) DEFAULT NULL,
      `entredumois` int(20) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `mensuelafd_idanimateur_FK` (`idanimateur`)
    )
    et voici ma deuxième table
    Code : 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
    CREATE TABLE IF NOT EXISTS `evafamille` (
      `idevafamille` int(20) unsigned NOT NULL AUTO_INCREMENT,
      `idanimateur` int(20) NOT NULL COMMENT 'CONSTRAINT FOREIGN KEY (idanimateur) REFERENCES animateur(idanimateur)',
      `chefdemenage` varchar(100) NOT NULL,
      `age` int(20) unsigned NOT NULL,
      `dateentre` date NOT NULL,
      `datesortie` date NOT NULL,
      `duresuivie` int(20) unsigned NOT NULL,
      `groupeentre` varchar(20) NOT NULL,
      `groupesortie` varchar(20) NOT NULL,
      `progressursoicenteneuf` int(20) unsigned NOT NULL,
      `progressurdix` int(20) unsigned NOT NULL,
      `resultatalasortie` varchar(50) NOT NULL,
      `vadvalide` int(20) unsigned NOT NULL,
      `vadmarirencontrer` int(20) unsigned NOT NULL,
      `vadferme` int(20) unsigned NOT NULL,
      `nombredestructuresversfamille` int(20) unsigned NOT NULL,
      `totalreferencements` int(20) unsigned NOT NULL,
      PRIMARY KEY (`idevafamille`),
      UNIQUE KEY `idevafamille` (`idevafamille`)
    )
    je vous envoie la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT (MonthName(datesortie)) as periode,Year(datesortie)as annee,count(distinct (evafamille.idevafamille)) as nbrefamille,count(distinct(mensuelafd.idanimateur))as animateur,(sum(evafamille.duresuivie)/ count(evafamille.idevafamille))as dure,(sum(evafamille.progressurdix)/ count(evafamille.idevafamille)) as dix,(sum(evafamille.progressursoicenteneuf)/ count(evafamille.idevafamille))as soicent,sum(evafamille.vadvalide) as valide,sum(evafamille.vadmarirencontrer) as mari,sum(evafamille.vadferme) as ferme,sum(evafamille.nombredestructuresversfamille) as structdif,sum(evafamille.totalreferencements) as ref,sum(mensuelafd.precedentsuivie) as precedentsuivie,sum(mensuelafd.entredumois) as entredumois
    FROM evafamille inner join mensuelafd
    GROUP BY Month(datesortie),Year(datesortie) Order by Month(datesortie),Year(datesortie)
    where (evafamille.datesortie >= {D '$month1'} AND evafamille.datesortie <= {D '$month2'}) GROUP BY Month( datesortie),Year(datesortie) Order by Month( datesortie),Year(datesortie)
    les champs en rouge sont ceux qui donné un résultat faut (mulitiplie par 21 ou par 10.5)
    merci de bien vouloir m'aider a trouvé une solution

  2. #2
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    D'habitude, la jointure porte sur des colonnes de chaque table, c'est à dire qu'avec le INNER JOIN, il faut un "ON tab1.col1 = tab2.col2".

    Mon souci avec vos tables, c'est que je ne trouve pas de colonne dans l'une qui référence une colonne dans l'autre....

    Pierre

  3. #3
    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 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    En effet, non seulement il manque le prédicat de jointure ON Tab1.col1 = Tab2.col2, mais aussi
    - le where est mal placé
    - il y a 2 fois group by
    - il y a 2 fois order by
    La requete est illisible telle que fournie, c'est quand même plus confortable ainsi :
    Code : 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
    SELECT (MonthName(datesortie)) as periode,
           Year(datesortie)as annee,
           count(distinct (evafamille.idevafamille)) as nbrefamille,
           count(distinct(mensuelafd.idanimateur))as animateur,
          (sum(evafamille.duresuivie)/ count(evafamille.idevafamille))as dure,
          (sum(evafamille.progressurdix)/ count(evafamille.idevafamille)) as dix,
          (sum(evafamille.progressursoicenteneuf)/ count(evafamille.idevafamille))as soicent,
           sum(evafamille.vadvalide) as valide,
           sum(evafamille.vadmarirencontrer) as mari,
           sum(evafamille.vadferme) as ferme,
           sum(evafamille.nombredestructuresversfamille) as structdif,
           sum(evafamille.totalreferencements) as ref,
           sum(mensuelafd.precedentsuivie) as precedentsuivie, 
           sum(mensuelafd.entredumois) as entredumois
    FROM evafamille 
    inner join mensuelafd 
    -- ici manquent les critères de jointure
    GROUP BY Month(datesortie),
             Year(datesortie) 
    Order by Month(datesortie),Year(datesortie)
    where (evafamille.datesortie >= {D '$month1'} 
      AND evafamille.datesortie <= {D '$month2'}) 
    GROUP BY Month( datesortie),Year(datesortie) 
    Order by Month( datesortie),Year(datesortie)

Discussions similaires

  1. problème de resultat de réquête sql avec jointure
    Par waritigui dans le forum MkFramework
    Réponses: 19
    Dernier message: 15/10/2015, 12h12
  2. Problème requête SQL avec jointure
    Par dorianb dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/05/2014, 11h13
  3. Requete SQL avec jointure sur trois tables
    Par pit2121 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/05/2008, 23h07
  4. Requête SQL avec jointure sur trois tables
    Par pit2121 dans le forum SQL
    Réponses: 0
    Dernier message: 19/05/2008, 20h24
  5. Requete SQL avec jointure multiple
    Par kissskoool dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/01/2008, 01h07

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