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

Développement SQL Server Discussion :

Problème multiple jointure


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2017
    Messages : 3
    Par défaut Problème multiple jointure
    Bonjour à tous

    Je me tourne vers vous avec ma question concernant une requête que j'ai à monter et j'avoue ne pas savoir comment m'y prendre.

    Tout d'abord, voici une image de ma requête dans le designer de SQLServer.

    Nom : imageReq.jpg
Affichages : 747
Taille : 57,4 Ko

    Très simple en soit. On remarque les LEFT OUTER JOIN à chaque jointure. les tables Passation et PassationAuSujetDe sont en fait la même table avec des alias différents. Voici maintenant la requête qui a été construite.

    Nom : reqSQL.jpg
Affichages : 406
Taille : 47,9 Ko

    On remarque, en jaune, le AND qui a été ajouté alors que, selon moi, on devrait voir une jointure. J'ai aussi de la difficulté à comprendre le début de la clause FROM avec les deux LEFT OUTER JOIN de suite.

    Le AND ajouté vient fausser mes résultats car il m'enlève certaines lignes, notamment celles dont les V_rech_Q_GED.idPassation ou V_rech_Q_ASQ.idPassation sont nulls. Malgré toutes les modifications que j'ai faites à ma requête, je n'arrive pas à me débarrasser du AND.

    J'ai tenté j'ajouter à la main une jointure vers la table passation, mais le compilateur crée une nouvelle instance de la table et la renomme passation_1. De quelle façon est-ce que je peux ajouter une jointure vers une table qui est déjà référencée dans ma clause FROM?

    Je vous remercie

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Bonjour,

    Le problème, tel qu'il est exposé, n'est pas du tout clair !
    Il faut laisser la "technique" de coté, et expliquer en terme fonctionnel, le rôle de chacune des tables, et exprimer, toujours en terme fonctionnel métier, le résultat que vous souhaitez obtenir.

    En attendant je me hasarde et je vous suggère la requête SQL ci-dessous. Cette requête liste les IdPassation impliqués dans V_rech_Q_ASQ ou dans V_rech_Q_GED, et ce, soit en tant que IdPassation soit en tant que IdPassationAuSujetDe.

    Code SQL : 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
    21
    22
    23
    	-- Cas 1 : V_rech_Q_ASQ   IdPassation 
    	SELECT Passation.IdPassation
    	FROM dbo.Passation
    	INNER JOIN V_rech_Q_ASQ
    	  ON V_rech_Q_ASQ.IdPassation = Passation.IdPassation
    UNION
    	-- Cas 2 : V_rech_Q_ASQ   IdPassationAuSujetDe 
    	SELECT PassationAuSujetDe.IdPassation
    	FROM dbo.Passation  AS  PassationAuSujetDe
    	INNER JOIN V_rech_Q_ASQ
    	  ON V_rech_Q_ASQ.IdPassationAuSujetDe = PassationAuSujetDe.IdPassation
    UNION
    	-- Cas 3 : V_rech_Q_GED   IdPassation 
    	SELECT Passation.IdPassation
    	FROM dbo.Passation
    	INNER JOIN V_rech_Q_GED
    	  ON V_rech_Q_GED.IdPassation = Passation.IdPassation
    UNION
    	-- Cas 4 : V_rech_Q_GED  IdPassationAuSujetDe 
    	SELECT PassationAuSujetDe.IdPassation
    	FROM dbo.Passation AS PassationAuSujetDe
    	INNER JOIN V_rech_Q_GED
    	  ON V_rech_Q_GED.IdPassationAuSujetDe = PassationAuSujetDe.IdPassation

    A+

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2017
    Messages : 3
    Par défaut
    Merci beaucoup de ton intervention!

    J'ai résolu mon problème. Je tentais de faire une boucle entre mes tables, de faire ma requête en "parallèle" mais je devais y aller en séquence.


    Je vous mets l'image de la requête ainsi que la requête elle-même.
    Nom : imageReq.jpg
Affichages : 459
Taille : 55,3 Ko

    Nom : reqSQL.jpg
Affichages : 385
Taille : 52,4 Ko

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 06/10/2009, 14h54
  2. Problème avec jointures multiples.
    Par Veritas5 dans le forum Développement
    Réponses: 3
    Dernier message: 05/06/2009, 15h42
  3. [SQL2005][TSQL]Problème de jointures multiples
    Par Veritas5 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2009, 17h04
  4. Problème de jointure multiple
    Par Max_be dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/10/2007, 21h39
  5. problème requête à jointure multiple...
    Par Ricardo_Tubbs dans le forum Access
    Réponses: 6
    Dernier message: 09/02/2006, 16h45

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