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 :

Besoin d'aide sur une requete externe un peu compliqué


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable SI (Toulouse)
    Inscrit en
    Juillet 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable SI (Toulouse)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 78
    Points : 122
    Points
    122
    Par défaut Besoin d'aide sur une requete externe un peu compliqué
    Bonjour,
    Je suis débutant et j'essaye de construire une requete, mais je bloque à un certain point je n'arrive pas à mixer une requete externe et interne (???).

    Voila la problématique j'ai une table sur laquelle je base une requete externe et qui contient une multitude de champ pouvant être Null jusque la c'est bon je pense. Le problème se pose lorsque je veux associé les valeur d'un champ de ma jointure externe via une table de liaison.

    Avec la requete cela sera plus claire :
    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
    select 	glpi_computers.name,
    	   	glpi_users.name,
    	   	glpi_groups.name,
    		glpi_computers.state,
    		glpi_dropdown_state.name ,
    		glpi_registry.computer_id,
    		glpi_registry.registry_value 
    from glpi_computers,glpi_registry
    
    	LEFT OUTER JOIN glpi_users
    		ON glpi_computers.FK_users = glpi_users.ID 
    	LEFT OUTER JOIN	glpi_dropdown_state
    		ON glpi_dropdown_state.ID = glpi_computers.state
    	LEFT OUTER JOIN glpi_groups
    		ON glpi_computers.FK_users = glpi_users_groups.FK_users
    		JOIN glpi_users_groups 
    			ON glpi_users_groups.FK_groups = glpi_groups.ID
    
    WHERE glpi_registry.computer_id=glpi_computers.ID and glpi_registry.registry_value like 'CTO%'
    la table computers contient l'id d'un utilisateur. pour récupéré le nom des groupes associé à l'utilisateur je passe par une table d'association user_group qui contient les clé étrangère des table user et group.

    Mon problème principal concerne la partie en gras. si je la laisse tel quel la requete s'execute pour tout ordinateur contenant un utilisateur mais je perd les valeurs Null. J'ai essayé en en remplaçant
    JOIN glpi_users_groups
    ON glpi_users_groups.FK_groups = glpi_groups.ID


    par

    LEFT OUTER JOIN glpi_users_groups
    ON glpi_users_groups.FK_groups = glpi_groups.ID


    Mais j'ai un message d'érreur m'indiquant une CROSS DEPENDENCY.

    Voila je ne suis pas sur de trouver une solution par cette voila. Toiute aide est la bienvenue.


    N'hésitez pas à me demadner si je n'ai pas été clair

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Responsable SI (Toulouse)
    Inscrit en
    Juillet 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable SI (Toulouse)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 78
    Points : 122
    Points
    122
    Par défaut
    Bon je crois avoir réussi j'avais inversé mal positionné mes tables dans ma requetes externe je pense que c'est bon.

    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 	glpi_computers.name,
    	   	glpi_users.name,
    	   	glpi_groups.name,
    		glpi_computers.state,
    		glpi_dropdown_state.name ,
    		glpi_registry.computer_id,
    		glpi_registry.registry_value 
    from glpi_computers,glpi_registry
    	LEFT OUTER JOIN glpi_users
    		ON glpi_computers.FK_users = glpi_users.ID 
    	LEFT OUTER JOIN	glpi_dropdown_state
    		ON glpi_dropdown_state.ID = glpi_computers.state
    	LEFT OUTER JOIN glpi_users_groups
    		ON glpi_computers.FK_users = glpi_users_groups.FK_users
    		LEFT OUTER JOIN glpi_groups 
    			ON glpi_users_groups.FK_groups = glpi_groups.ID
    where glpi_registry.computer_id=glpi_computers.ID and glpi_registry.registry_value like 'CTO%'

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LEFT OUTER JOIN glpi_groups
            ON glpi_computers.FK_users = glpi_users_groups.FK_users
    La jointure porte sur glpi_groups mais la condition de jointure porte sur glpi_user_groups !

    EDIT (nouvelle requête postée avant mon message) :

    Voici ta nouvelle requête remise en forme, avec des alias pour en simplifier la lecture et en utilisant partout la syntaxe nomalisée depuis 1992 pour les jointures (pourquoi mélanger ?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT c.name, u.name, g.name, c.state, d.name, r.computer_id, r.registry_value 
    FROM glpi_computer AS c
    INNER JOIN glpi_registry AS r ON r.computer_id = c.ID
    LEFT OUTER JOIN glpi_users AS u ON c.FK_users = u.ID 
    LEFT OUTER JOIN    glpi_dropdown_state AS d ON d.ID = c.state
    LEFT OUTER JOIN glpi_users_groups AS ug ON c.FK_users = ug.FK_users
      LEFT OUTER JOIN glpi_groups AS g ON ug.FK_groups = g.ID
    WHERE r.registry_value like 'CTO%'

  4. #4
    Membre régulier
    Homme Profil pro
    Responsable SI (Toulouse)
    Inscrit en
    Juillet 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable SI (Toulouse)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 78
    Points : 122
    Points
    122
    Par défaut
    Bonjour,
    Merci d'avoir pris le temps d'examiner ma requete.

    Je ne suis pas un DBA et je peux faire quelques énormités en fonction de mon niveau de compréhension.

    J'avais eu il y a longtemps un cours sur SQL basé sur oracle avec des requetes externe avec des (+), je suis sur une base Mysql donc j'ai fait quelques recherches et me suis adapté.

    Voila en tout cas merci pour la réécriture !

  5. #5
    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 392
    Points
    28 392
    Par défaut
    Pour te remettre à niveau sur la syntaxe du langage SQL, tu peux aller consulter le cours SQL sur le site.

Discussions similaires

  1. Besoin d'aide sur une requete ACCESS
    Par Themis69 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/01/2008, 01h02
  2. besoin d'aide sur une requete (pas forcement difficile)
    Par igorzup dans le forum Développement
    Réponses: 2
    Dernier message: 30/10/2007, 10h27
  3. Besoin d'aide sur une requete avec jointure et MAX()
    Par droog dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/07/2007, 18h23
  4. Besoin d'aide sur une requete
    Par ideal dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/09/2006, 11h43
  5. Besoin d'aide sur une requete ds un trigger
    Par ideal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/02/2006, 10h05

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