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

SQL Procédural MySQL Discussion :

Distinct sur jointure ineficace


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Par défaut Distinct sur jointure ineficace
    Bonjour à tous,

    Voila j'ia une base mssql et j'effectue une requete qui s'aparente à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query_pers ='SELECT DISTINCT(T_SAL.MATRICULE_),T_PERS.NOM_ ,T_PERS.PRENOM_ ,T_AFFEC.TITRE_ZONE_ ,T_AFFEC.TEXTE_'
            . ' FROM '.$Table_pers.' T_PERS , '.$Table_sal.' T_SAL , '.$Table_affec.' T_AFFEC'
    		. ' WHERE T_SAL.PERSONNE_ = T_PERS.PERSONNE_'
    		. ' AND T_SAL.PERSONNE_ = T_AFFEC.SALARIE_'
    		. ' AND TITRE_ZONE_ IN ("2","3");';
    La requete me retourne deux fois les memes usagés ce qui normale car ils ont chacun un titre_zone(1 et 2), cependant le terme DISTINCT ne devrait-il pas me retourner qu'un seul nom ?
    J'espere avoir été assez clair ...
    Merci pour votre soutient .

  2. #2
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Bonjour,
    Le distinct s'applique à tous les champs. Les fonctions d'agrégats peuvent répondre à votre besoin.

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Par défaut
    Je ne voit pas bien ce qu'est une focntion d'agraga pourriez vous m'en dire d'avantage en attendant je me renseigne sur le net... De mes cours je me rappel que l'agrégat sert a faire des MAX, SUM etc ...

  4. #4
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Ca va vous donner quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $query_pers ='SELECT T_SAL.MATRICULE_,T_PERS.NOM_ ,T_PERS.PRENOM_ ,max(T_AFFEC.TITRE_ZONE_)'
            . ' FROM '.$Table_pers.' T_PERS , '.$Table_sal.' T_SAL , '.$Table_affec.' T_AFFEC'
    		. ' WHERE T_SAL.PERSONNE_ = T_PERS.PERSONNE_'
    		. ' AND T_SAL.PERSONNE_ = T_AFFEC.SALARIE_'
    		. ' AND TITRE_ZONE_ IN ("2","3")'
            . ' GROUP BY T_SAL.MATRICULE_,T_PERS.NOM_ ,T_PERS.PRENOM_;';
    Vous êtes forcés de chosir quel "titre_zone" vous voulez ramener. Ici j'ai choisi le max. Pour ramener le libellé correspondant vous pouvez passer par une sous requête.

    NB: je viens de voir le critère TITRE_ZONE_ IN ("2","3") ... et vous dites que la requête ramène l'enregistrement avec la valeur "1" ?

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Par défaut
    Je vais aller plus loin dans mon explication afin qu'on soit sur la meme longueur d'onde :
    -J'ai 3 tables :

    PERSONNE
    Personne_(ID)
    Nom_
    Prenom_

    SALARIE
    Personne_(ID)
    Matricule_

    AFFECTATION
    Salarie_(ID)
    Titre_zone_
    Texte_

    Je récupere nom prenom matricule texte...
    Mon probleme dans ce cas present est le suivant :
    Pour un salarie (table AFFECTATION) j'ai titre_zone qui contient 1 et 2 comme ci contre :

    Salarie|Titre_zone_|Texte|
    BOBI | 1 | 062
    BOBI | 2 | 5002

    Texte étant variable
    J'amerai afficher ceci :
    NOM | PRENOM | MATRICULE | SITE | Centre |
    x | bobi | 12 | 062 | 5002 |

    Voila je ne sais pas si ca va vous eclairez , je ne sais pas trop comment faire (une table temp p être ) .

  6. #6
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Cela ne suffit-il pas ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select 
       Nom_ NOM,
       Prenom_ PRENOM,
       Matricule_ MATRICULE,
       AFF1.Texte SITE,
       AFF2.Texte Centre
    from
       PERSONNE, SALARIE, AFFECTATION AFF1 , AFFECTATION AFF2
    where
       PERSONNE.Personne_ = SALARIE.Personne_
       and PERSONNE.Personne_ = AFF1.Salarie_
       and PERSONNE.Personne_ = AFF2.Salarie_
       and AFF1.Titre_zone_="1"
       and AFF2.Titre_zone_="2"

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

Discussions similaires

  1. [MYSQL] Question sur jointure
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/10/2005, 11h46
  2. Select distinct sur varchar
    Par SILO dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 02/10/2005, 00h17
  3. Distinct sur un seul champ...
    Par Noodles dans le forum Langage SQL
    Réponses: 16
    Dernier message: 04/01/2005, 09h36
  4. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54
  5. [Débutant] DISTINCT sur une seule des colonnes ?
    Par Neilos dans le forum Langage SQL
    Réponses: 9
    Dernier message: 23/06/2004, 23h04

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