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 :

Cumuler les LEFT JOIN ?


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 71
    Points : 38
    Points
    38
    Par défaut Cumuler les LEFT JOIN ?
    Bonjour à tous,

    Je pense avoir bien compris les différences entre les INNER et les LEFT join.
    Mais sur une requête un peu complexe, je me perds car j'ai plusieurs JOIN à faire.
    Je mets en pièce jointe un petit schéma, ça sera plus simple pour expliquer ce que j'ai et ce que je veux faire.

    Comment arriver à faire les JOIN dont j'ai besoin ? Est-ce que je peux les cumuler, les baser sur des tables différentes ?

    Merci bcp pour votre aide !
    Images attachées Images attachées  

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Pour un cours complet et gratuit sur les jointures, vous pouvez lire celui de SQLPro

    Vous pouvez spécifier autant de jointures (INNER, LEFT, RIGHT, FULL, CROSS) sur autant de tables ou vues qu'il est nécessaire pour exprimer votre requête.

    Est-ce que le résultat que vous souhaitez obtenir est dans la capture Excel que vous avez faite, à droite ?
    Qu'avez-vous écrit pour le moment ?

    @++

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    Merci pour la réponse et pour le lien, très instructif en effet.

    1. Pour faire le lien entre LISTE et DEF_CROISEMENT, je vise plus d'un champ dans mon LEFT JOIN (cf le schéma), comment faire dans ce cas ? J'utilise un AND, comme montré dans la doc SQLpro ?
    2. Pour afficher la table jointure (DETAIL_CROISEMENT), je vise 2 champs de 2 tables différentes. Est-ce que l'arbre de jointure, cf SQLpro, est la solution dans ce cas ?

    Ca donnerait donc un truc comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select reference2...
    from LISTE 
    LEFT OUTER JOIN DEF_CROISEMENT 
      ON LISTE.lieu=DEF_CROISEMENT.lieu
      AND LISTE.annee=DEF_CROISEMENT.annee
      LEFT OUTER JOIN DETAIL_CROISEMENT 
        on LISTE.reference=DETAIL_CROISEMENT.reference1
        LEFT OUTER JOIN DETAIL_CROISEMENT 
        on DEF_CROISEMENT.croisement_id=DETAIL_CROISEMENT.croisement_id
    Et oui, l'exemple dans la capture d'Excel est ce que je veux obtenir.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    1. Pour faire le lien entre LISTE et DEF_CROISEMENT, je vise plus d'un champ dans mon LEFT JOIN (cf le schéma), comment faire dans ce cas ? J'utilise un AND, comme montré dans la doc SQLpro ?
    Exact

    2. Pour afficher la table jointure (DETAIL_CROISEMENT), je vise 2 champs de 2 tables différentes. Est-ce que l'arbre de jointure, cf SQLpro, est la solution dans ce cas ?
    Idem

    Vous pouvez vous passer des OUTER, il sont redondants avec le type de la jointure.
    En revanche qualifiez toujours le nom des objets (tables, vues, procédures stockées, ...) par le nom du schéma auquel ils appartiennent.
    Par défaut c'est dbo, mais rien ne vous empêche d'en créer d'autres

    Évitez de mettre des caractères diacritiques ou cabalistiques dans les noms de colonne : tôt ou tard vous rencontrerez des problèmes, en plus de devoir mettre des crochets.

    Vous pouvez aussi utiliser des alias pour les tables et les vues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT		L.[n°position]
    		, L.reference
    		, DCR.croisement_id
    		, DCR.reference2 AS reference2_correspondante
    FROM		dbo.LISTE  AS L
    LEFT JOIN	dbo.DEF_CROISEMENT AS DC
    			ON L.lieu = DC.lieu
    			AND L.annee = DC.annee
    LEFT JOIN	dbo.DETAIL_CROISEMENT AS DCR
    			ON L.reference = DCR.reference1
    LEFT JOIN	dbo.DETAIL_CROISEMENT AS DCR2
    			ON DC.croisement_id = DCR2.croisement_id
    Votre requête est donc correcte, sous réserve que les cardinalités, que votre capture ne donne pas, les respecte

    @++

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    Merci pour votre réponse.

    J'ai compris le principe, mais j'ai laissé tomber... Le schéma de la base sur laquelle je bosse est en effet plus complexe que l'exemple que j'ai donné.
    Impossible d'obtenir les résultats que je voulais, donc j'ai fait un truc plus simple...
    Merci encore !

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

Discussions similaires

  1. Ahlala les LEFT OUTER JOIN
    Par lili2704 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/06/2010, 15h47
  2. LEFT JOIN et les places des tables dans la condition
    Par moukit233 dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/01/2010, 09h08
  3. Left join et les limites
    Par snoop-tom dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/01/2009, 15h39
  4. calcul dans les requêtes et left join
    Par jejeman dans le forum Requêtes
    Réponses: 5
    Dernier message: 13/07/2007, 15h34
  5. Réponses: 6
    Dernier message: 23/01/2007, 10h17

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