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 :

Probleme de "Distinct"


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut Probleme de "Distinct"
    Bonjour a tous,

    Je rencontre un soucis avec une requete SQL, je ne trouve pas de solution.
    Lorsque j'excute la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT     tblBooking.IdBooking, tblBooking.IdType, tblBooking.StartDate, tblBooking.EndDate, tblBooking.ReturnDate, tblBooking.Comment, tblBooking.IdBuilding, 
                          tblBooking.UserId, tblBooking.FirstName, tblBooking.LastName, tblBooking.CostCenter, tblBooking.Quantity, tblBooking.Signature
    FROM         tblHardwareType INNER JOIN
                          tblBooking ON tblHardwareType.IdType = tblBooking.IdType INNER JOIN
                          tblMaterial ON tblHardwareType.IdType = tblMaterial.IdType INNER JOIN
                          tblTeam ON tblMaterial.IdTeam = tblTeam.IdTeam LEFT OUTER JOIN
                          tblBuilding INNER JOIN
                          tblCountry ON tblBuilding.IdCountry = tblCountry.IdCountry ON tblTeam.IdBuilding = tblBuilding.IdBuilding AND tblBooking.IdBuilding = tblBuilding.IdBuilding
    WHERE     (tblCountry.IdCountry = 1)
    je récupère tous mes résultats en double. J'ai donc essayé de faire un distinct de "tblBooking.IdBooking" mais j'ai l'erreur : "Le type de données text ne peut pas être selectionné en tant que DISTINCT car il n'est pas comparable".

    Je pense qu'il faut donc que j’exécute une sous requete qui récupère mes "distinct" idbooking et qu'a partir ce ces résultats, j’exécute une requete pour récupérer toutes les infos dont j'ai besoin mais je ne sais pas comment faire.

    Quelqu'un pourrait-il m'aidé, je n'ai vraiment pas le niveau en SQL

    Merci d'avance de votre aide.

    DeWaRs

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Dans un premier temps, telle qu'est écrite la requête, la jointure externe sur la table tblBuilding n'est d'aucun intérêt puisque tu poses une restriction sur tblCountry qui lui est strictement liée.

    Ensuite, comme tu retournes exclusivement des colonnes de tblBooking, il semble évident que tu cherches l'existence des lignes correspondant à tes jointures. Il faut donc déplacer ces jointures dans une table dérivée interrogée avec EXISTS.

    Ce qui donnerait une requête telle que celle-ci :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SELECT  tblBooking.IdBooking
        ,   tblBooking.IdType
        ,   tblBooking.StartDate
        ,   tblBooking.EndDate
        ,   tblBooking.ReturnDate
        ,   tblBooking.Comment
        ,   tblBooking.IdBuilding
        ,   tblBooking.UserId
        ,   tblBooking.FirstName
        ,   tblBooking.LastName
        ,   tblBooking.CostCenter
        ,   tblBooking.Quantity
        ,   tblBooking.Signature
    FROM    tblBooking
    WHERE   EXISTS
            (   SELECT  1
                FROM    tblHardwareType
                    INNER JOIN
                        tblMaterial
                        ON  tblHardwareType.IdType = tblMaterial.IdType
                    INNER JOIN
                        tblTeam
                        ON  tblMaterial.IdTeam = tblTeam.IdTeam
                    INNER JOIN
                        tblBuilding
                        ON  tblTeam.IdBuilding = tblBuilding.IdBuilding
                    INNER JOIN
                        tblCountry
                        ON  tblBuilding.IdCountry = tblCountry.IdCountry
              WHERE   tblCountry.IdCountry  = 1
                  AND tblBooking.IdBuilding = tblBuilding.IdBuilding
                  AND tblBooking.IdType     = tblHardwareType.IdType
            )
    ;

  3. #3
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Whaou ! Ca marche nikel, et du premier coup, merci beaucoup ! Il ne me reste plus qu'a comprendre vraiment ce que tu as fait
    Merci beaucoup de ton aide.

    Cordialement.

    DeWaRs

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

Discussions similaires

  1. [MySQL] Problème de rquête avec Quôte
    Par yom17 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 23/10/2006, 10h58

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