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 :

Requête SQL multi table / exists


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 Requête SQL multi table / exists
    Bonjour,

    Je seèche completement sur la méthode à adopter pour ecrire une requête SQL qui ne doit pourtant pas être bien compliqué...
    Voici ce que je cherche à faire.
    J'ai les tables suivantes :

    tblAuthorizedGroup
    AuthorizedGroupID
    IdGroups
    UserID

    tblGroups
    IdGroups
    GroupsName
    IdCountry

    tblHardWareType
    IdType
    HardwareName
    IdGroups
    Visible ---> si visible = 0 alors le hardware est visible pour tous. Si visible = 1, le hardware est visible uniquement par les membres du groupe auquel le hardware appartient.

    Je voudrais afficher dans une requête le resultat des requêtes suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT   HardwareName, IdType, FROM tblHardwareType WHERE Visible = 0
    et
    Afficher aussi le HardwareName / IdType ou visible = 1 et ou l'utilisateur (userID) est membre du groupe auquel appartient le HardwareName

    Je ne sais pas si c'est tres claire ...

    Merci d'avance de vos réponses.

    Cordialement.

    DeWaRs

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 397
    Points
    28 397
    Par défaut
    Il s'agirait donc de faire une jointure entre les tables tblHardWareType et tblAuthorizedGroup...

  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
    Bonjour

    Oui quelque chose comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT     tblHardwareType.HardwareName, tblHardwareType.IdType, tblAuthorizedGroups.UserId
    FROM         tblAuthorizedGroups INNER JOIN
                          tblGroups ON tblAuthorizedGroups.IdGroups = tblGroups.IdGroups INNER JOIN
                          tblHardwareType ON tblGroups.IdGroups = tblHardwareType.IdGroups
    WHERE     (tblAuthorizedGroups.UserId = @UserID) and Visible = 1
    Mais avec ca, je recupere que les hardwarename ou visible 1 et dont le matériel appartient au groupe du userid.

    Il me manque la liste du matériel ou visible = 0 .

    Cordialement.

    DeWaRs

    Apres avoir ecrit ce message, je me suis dit, pourquoi pas ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  distinct (tblHardwareType.IdType),   tblHardwareType.HardwareName
    FROM         tblAuthorizedGroups INNER JOIN
                          tblGroups ON tblAuthorizedGroups.IdGroups = tblGroups.IdGroups INNER JOIN
                          tblHardwareType ON tblGroups.IdGroups = tblHardwareType.IdGroups
    WHERE     (tblAuthorizedGroups.UserId = 'i057591') or (tblHardwareType.Visible = 1 OR
                          tblHardwareType.Visible = 0)
    Je pense que je ne suis pas loin, c'était tout bête en fait ...

    Merci de ton aide.

    Cordialement

    DeWaRs

  4. #4
    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
    J'ai finalement trouvé, le UNION ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  distinct (tblHardwareType.IdType),   tblHardwareType.HardwareName
    FROM         tblAuthorizedGroups INNER JOIN
                          tblGroups ON tblAuthorizedGroups.IdGroups = tblGroups.IdGroups INNER JOIN
                          tblHardwareType ON tblGroups.IdGroups = tblHardwareType.IdGroups
    WHERE    IdCountry = '1'  AND tblHardwareType.Visible = 0
    UNION 
    SELECT  distinct (tblHardwareType.IdType),   tblHardwareType.HardwareName
    FROM         tblAuthorizedGroups INNER JOIN
                          tblGroups ON tblAuthorizedGroups.IdGroups = tblGroups.IdGroups INNER JOIN
                          tblHardwareType ON tblGroups.IdGroups = tblHardwareType.IdGroups
    WHERE    IdCountry = '1'  AND  tblAuthorizedGroups.UserId = 'fdf' AND Visible = 1
    Merci de ton aide

    DeWaRs

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    vous que vous n'utilisez pas les colonnes de deux de vos tables dans le select, il serait peut être intéressant de passer par un EXISTS

  6. #6
    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
    Pourriez vous traduire la requête précédente avec le EXISTS, je ne vois pas vraiment ce que vous voulez dire

    Merci d'avance.

    DeWaRs

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour


    et comme ceci ?

    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
     
    SELECT  DISTINCT 
    			tblHardwareType.IdType,   
    			tblHardwareType.HardwareName
     
    FROM		tblHardwareType
    INNER JOIN	tblGroups 
    	ON			tblGroups.IdGroups = tblHardwareType.IdGroups
    LEFT JOIN	 tblAuthorizedGroups 
    	ON			tblAuthorizedGroups.IdGroups = tblGroups.IdGroups 
    	AND			tblAuthorizedGroups.UserId = 'fdf'
    WHERE    
    			IdCountry = '1'  
    	AND		(
    			tblHardwareType.Visible = 0
    			OR
    			tblAuthorizedGroups.UserId IS NOT NULL
    			)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/07/2012, 15h10
  2. [Debutant] Requête SQL Multi-Tables
    Par Superbretzel dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/02/2008, 11h47
  3. [PDO] Requêtes MySQL multi-tables ?
    Par nabab dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/08/2007, 19h40
  4. [Requête/SQL] 2 tables
    Par megapacman dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/04/2007, 11h34
  5. [RegEx] Requête SQL sur tables non connues à l'avance (regex)
    Par lothar59 dans le forum Langage
    Réponses: 2
    Dernier message: 27/02/2007, 10h33

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