Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2012, 15h56   #1
Membre du Club
 
Inscription : décembre 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 100
Points : 55
Points : 55
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 :
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
DeWaRs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 19h05   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 546
Points : 7 546
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 :
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
        )
;
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/01/2012, 10h07   #3
Membre du Club
 
Inscription : décembre 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 100
Points : 55
Points : 55
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
DeWaRs est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h14.


 
 
 
 
Partenaires

Hébergement Web