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

Requêtes MySQL Discussion :

[jointure] optimisation de requête !


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut [jointure] optimisation de requête !
    Bonjour le forum ,

    J'ai une requête sql avec jointure (elle marche bien et me retourne le résultat souhaité).

    Cependant je voudrais savoir si cette syntaxe est la mieux adaptée ou bien si elle peut être optimisée.

    Votre aide me sera précieuse, je ne touche que rarement aux jointures. Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT u.* FROM user u
    left join affectation_projet a
    on a.id_user=u.id_user
    where a.id_projet 
    in(select id_projet from affectation_projet where id_user =1)

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    en gros je souhaite retourner les users qui sont dans les mêmes projets que le user dont le id = 1

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Comme je l'explique sur mon blog, mettre une condition de restriction (WHERE) sur la table de droite d'une jointure externe gauche revient à faire une jointure interne.

    Par ailleurs, évite la guerre des étoiles !

    Enfin, ta condition de restriction est équivalente à une nouvelle jointure sur la table affectation_projet et la jointure devrait être plus performante qu'une requête corrélée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM user u
    INNER JOIN affectation_projet a ON a.id_user = u.id_user
        INNER JOIN affectation_projet a2 ON a2.id_user = a.id_user
    WHERE a2.id_user = 1
    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é
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    Merci bcp de ton aide , ta réponse m'a bcp aidé .

    il fallait changer la colonne de jointure du deuxième inner join pour retourner les collègues du user, la requête devient alors comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT u.*
    FROM user u
    INNER JOIN affectation_projet a ON a.id_user = u.id_user
        INNER JOIN affectation_projet a2 ON a2.id_projet = a.id_projet
     WHERE a2.id_user = 1
    et pour ne pas retourner le collaborateur en question il sufit d'ajouter le contrôle suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT u.*
    FROM user u
    INNER JOIN affectation_projet a ON a.id_user = u.id_user
        INNER JOIN affectation_projet a2 ON a2.id_projet = a.id_projet
              and a.id_user <> 1
    WHERE a2.id_user = 1
    Merci encore de ta reponse , je note comme résolu

  5. #5
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Enfin, ta condition de restriction est équivalente à une nouvelle jointure sur la table affectation_projet et la jointure devrait être plus performante qu'une requête corrélée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM user u
    INNER JOIN affectation_projet a ON a.id_user = u.id_user
        INNER JOIN affectation_projet a2 ON a2.id_user = a.id_user
    WHERE a2.id_user = 1

    Peut etre plus performante mais surement pas iso fonctionnelle ...

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

Discussions similaires

  1. Optimisation de requête avec jointure
    Par kineton dans le forum Requêtes
    Réponses: 8
    Dernier message: 27/08/2013, 13h47
  2. Optimisation de requête avec jointures
    Par ok.Idriss dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/12/2010, 20h44
  3. Optimisation de requête avec jointure textuelle
    Par spirou33 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 26/10/2007, 09h36
  4. Optimiser les jointures dans des requêtes
    Par klereth dans le forum PostgreSQL
    Réponses: 12
    Dernier message: 23/04/2005, 17h29
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

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