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 :

Requete entre 2 table et récupération d'une ligne


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 27
    Par défaut Requete entre 2 table et récupération d'une ligne
    Bonjour,

    Je viens vers vous après des recherches infructifiantes.

    Mon souci sous Mysql :

    Deux table.

    Personne et Poste

    Pour chaque personne correspont plusieur poste et je voudrais recuper pour ma pars une ligne avec les champs de ma table personne et ma table poste ou le poste de la personne est le dernier c'est à dire le NUM_POSTE le plus haut mais je n'y arrive pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT EMAIL_PERSONNE,P.NUM_PERSONNE,NOM_PERSONNE,PRENOM_PERSONNE,ADRESSE_PERSONNE,CP_PERSONNE,VILLE_PERSONNE,PAYS_PERSONNE,NUM_ENTREPRISE,DESIGNATION_POSTE,NUM_POSTE FROM PERSONNE_ADAUC AS P,POSTE_ADAUC AS P1 WHERE (P.NUM_PERSONNE = P1.NUM_PERSONNE) AND P.NUM_PERSONNE = 10269
    Ca me semble pas compliquer mais je seche !!

    J'ai mis un exemple pour une personne precise là mais sinon j'enleve le AND P.NUM_PERSONNE = 10269 et cela deviens un peu plus complexe car je dois trier sur chaque personne et recuper que la bonne ligne pour chaque individu , j'imagine donc qu'il s'agit de faire une sous requete dans la clause WHERE !

    : Une idée :

  2. #2
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Par défaut
    Fait quelques recherches sur les fonctions MAX et GROUP BY, tu devrais y trouver ton bonheur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 27
    Par défaut
    Oui merci je suis dessus depuis hier et .... je ne sais pas , je seche completement là !!!

    Si je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     SELECT DISTINCT P.NUM_PERSONNE, EMAIL_PERSONNE, NOM_PERSONNE, PRENOM_PERSONNE, ADRESSE_PERSONNE, CP_PERSONNE, VILLE_PERSONNE, PAYS_PERSONNE, NUM_ENTREPRISE, DESIGNATION_POSTE, NUM_POSTE
    FROM PERSONNE_ADAUC AS P, POSTE_ADAUC AS P1
    WHERE (P.NUM_PERSONNE = P1.NUM_PERSONNE) 
     AND P.NUM_PERSONNE = 10269
    GROUP BY P.NUM_PERSONNE
    j'obtiens 2 enregistrement pour cette personne, les infos de la personne + les infos du poste qui correspond pour chaque poste.

    Maintenant je veux recup seulement la ligne pour le dernier poste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SELECT DISTINCT P.NUM_PERSONNE, EMAIL_PERSONNE, NOM_PERSONNE, PRENOM_PERSONNE, ADRESSE_PERSONNE, CP_PERSONNE, VILLE_PERSONNE, PAYS_PERSONNE, NUM_ENTREPRISE, DESIGNATION_POSTE, MAX( NUM_POSTE )
    FROM PERSONNE_ADAUC AS P, POSTE_ADAUC AS P1
    WHERE (P.NUM_PERSONNE = P1.NUM_PERSONNE) 
    ) AND P.NUM_PERSONNE = 10269
    GROUP BY P.NUM_PERSONNE
    HAVING MAX( NUM_POSTE )
    Et la j'ai un mix des 2 enregistrements !

  4. #4
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Par défaut
    essaye ca :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT MAX(NUM_POSTE), NOM_PERSONNE
    FROM PERSONNE_ADAUC AS P, POSTE_ADAUC AS P1
    WHERE (P.NUM_PERSONNE = P1.NUM_PERSONNE)
     AND P.NUM_PERSONNE = 10269
    GROUP BY NOM_PERSONNE

    Là, je n'ai ramené que le champs NOM, si tu veux ramener les autre, tu dois les mettre dans le GROUP BY

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 27
    Par défaut
    Je retourne 2 enregistrement !

    Maintenant il faut que je recupere celui avec le numero de poste le plus haut

  6. #6
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Par défaut
    Peux tu donner les deux enregistrements que tu retournes?

    Si tu retournes deux enregistrements pour une même personne, c'est qu'elle a deux postes ayant la même valeur. (en théorie )

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 27
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SELECT MAX( NUM_POSTE ) , NOM_PERSONNE, NUM_ENTREPRISE, DESIGNATION_POSTE
    FROM PERSONNE_ADAUC AS P, POSTE_ADAUC AS P1
    WHERE (
    P.NUM_PERSONNE = P1.NUM_PERSONNE
    ) AND P.NUM_PERSONNE = 10269
    GROUP BY P.NUM_PERSONNE, NUM_ENTREPRISE, DESIGNATION_POSTE LIMIT 0, 30
    resultat :
    MAX(NUM_POSTE) NOM_PERSONNE NUM_ENTREPRISE DESIGNATION_POSTE
    8637 XXXXX 7735 Manager
    commercial
    9968 XXXXX 9170 Business manager
    Voila

  8. #8
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Par défaut
    Juste un détail, remplace ton P.num_personne en P.nom_personne dans ton group by.

    Je suis d'ailleurs un peu surpris, cette requête ne serait pas passée sous oracle...

    Sinon, je vois vraiment pas là...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 27
    Par défaut
    Pareil toujours 2 reponse !

    Je pense qu'une sous requete serait bien

  10. #10
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Si ta version (que tu n'as pas indiquée) est >= 4.1, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT P.NUM_PERSONNE, EMAIL_PERSONNE, NOM_PERSONNE, PRENOM_PERSONNE, ADRESSE_PERSONNE, 
           CP_PERSONNE, VILLE_PERSONNE, PAYS_PERSONNE, NUM_ENTREPRISE, DESIGNATION_POSTE, NUM_POSTE 
    FROM PERSONNE_ADAUC AS P INNER JOIN POSTE_ADAUC AS P1 ON P.NUM_PERSONNE = P1.NUM_PERSONNE
    WHERE P.NUM_PERSONNE = 10269 
      AND NUM_POSTE = (SELECT MAX(NUM_POSTE) 
                       FROM POSTE_ADAUC P2
                       WHERE P.NUM_PERSONNE = P2.NUM_PERSONNE)
    Solution classique dont il doit exister des dizaines d'exemples sur ce forum.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 27
    Par défaut
    Je suis sous une version 3.23 ! J'ai un retour d'erreur à partir de la sous requete !
    J'imagine que je perd mon temps si Mysql ne gere pas les sous requete sur cette version !

  12. #12
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Est-ce que ta version accepte la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.col1, a.col2
    FROM laTable a INNER JOIN laTable b ON a.col1 = b.col1
    GROUP BY a.col1, a.col2
    HAVING MAX(b.col2) = a.col2
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.col1, a.col2
    FROM laTable a, laTable b 
    WHERE a.col1 = b.col1
    GROUP BY a.col1, a.col2
    HAVING MAX(b.col2) = a.col2

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 27
    Par défaut
    Group by max ...oui sans souci !! Cela semble passer

  14. #14
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Citation Envoyé par lechevin
    Group by max ...oui sans souci !! Cela semble passer
    Alors essaye d'appliquer cette idée...

Discussions similaires

  1. [MySQL] requete entre deux tables!
    Par laipreu dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/11/2008, 14h53
  2. requete entre deux tables
    Par drakov666 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/11/2005, 11h51
  3. [Débutant] requete entre plusieurs tables
    Par xufux dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 14h00
  4. requete entre trois tables
    Par fpouget dans le forum Langage SQL
    Réponses: 8
    Dernier message: 08/03/2005, 21h44
  5. Requete entre 2 tables.
    Par stebar dans le forum Débuter
    Réponses: 11
    Dernier message: 09/06/2004, 16h21

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