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 confirmé
    Homme Profil pro
    Responsable SI (Toulouse)
    Inscrit en
    Juillet 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable SI (Toulouse)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    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 confirmé
    Homme Profil pro
    Responsable SI (Toulouse)
    Inscrit en
    Juillet 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable SI (Toulouse)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    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
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 813
    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 813
    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%'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

    Informations professionnelles :
    Activité : Responsable SI (Toulouse)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    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 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 131
    Par défaut
    Pour te remettre à niveau sur la syntaxe du langage SQL, tu peux aller consulter le cours SQL sur le site.
    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
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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