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

MS SQL Server Discussion :

WHERE =* et FULL OUTER JOIN


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut WHERE =* et FULL OUTER JOIN
    Bonjour,


    J'ai une requete (moche) qui me renvoit 15 lignes (5 enregistrements dans la table PortZone et 3 dans la table PortPoid)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from PortZone, PortPoid, PortZoneHasPortPoid
    where PortZoneHasPortPoid.Fk_Zone =* PortZone.Id
    AND PortZoneHasPortPoid.Fk_PortPoid =* PortPoid.id
    Quand j'execute cette meme requete dans enterprise manager (MSSQL 2000), ce dernier retouche la syntaxe pour me proposer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT     *
    FROM         PortZone RIGHT OUTER JOIN
                          PortZoneHasPortPoid ON PortZoneHasPortPoid.FK_Zone = PortZone.Id LEFT OUTER JOIN
                          PortPoid ON PortZoneHasPortPoid.FK_PortPoid = PortPoid.Id
    Du coup j'ai 4 résultats.


    Je modifie donc cette requete pour avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT     *
    FROM         PortZone FULL OUTER JOIN
                          PortZoneHasPortPoid ON PortZoneHasPortPoid.FK_Zone = PortZone.Id FULL OUTER JOIN
                          PortPoid ON PortZoneHasPortPoid.FK_PortPoid = PortPoid.Id
    et la j'ai 7 résultats ....

    j'ai donc re tenté ma chance avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT     *
    FROM         PortZone FULL JOIN
                          PortZoneHasPortPoid ON PortZoneHasPortPoid.FK_Zone = PortZone.Id FULL JOIN
                          PortPoid ON PortZoneHasPortPoid.FK_PortPoid = PortPoid.Id
    Mais je n'obtiens toujours que 7 resultats ....


    Quelle syntaxe est équivalente a where =* svp?
    Je suis un peu perdue d'un coup !

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    JAMAIS DE RIGTH OUTER

    normalement,il te suffit d'inverser les tables pz et pzh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     *
    FROM PortZoneHasPortPoid pzh 
    LEFT OUTER JOIN PortZone pz ON pzh.FK_Zone = pz.Id 
    LEFT OUTER JOIN PortPoid pp ON pzh.FK_PortPoid = pp.Id

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut
    4 resultats avec la requete que tu proposes

    Et 7 si je la transforme en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT     *
    FROM         PortZoneHasPortPoid pzh FULL OUTER JOIN
                          PortZone pz ON pzh.FK_Zone = pz.Id FULL OUTER JOIN
                          PortPoid pp ON pzh.FK_PortPoid = pp.Id

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    en fait c'est un cross join, tu associes tous les enregistrements des tables PortZone ,PortPoid (5 x 3 = 15) et tu récupères les enregistrements de PortZoneHasPortPoid qui ont tous les cas possibles de clés rapportées de ces deux tables.

    çà devrait donner un truc du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT     *
    FROM PortZoneHasPortPoid pzh 
    LEFT OUTER JOIN (select * from PortZone CROSS JOIN PortPoid pp) A where pzh.FK_PortPoid = A.Id and pzh.FK_Zone = A.Id
    mais il y a 2 fois ID, il faut en caster un
    Excuses il me faut partir.
    A+

  5. #5
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut
    Je ne peux pas faire du cross join car j'ai 3 tables

    donc ca ne ferai pas port*poid mais port*portHasPoid*Poid


    J'ai essayé de faire tourner ta requete, l'alias A ne passe pas et j'arrive pas a en faire une syntaxe qui fonctionne

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    est ce que tu as un select * ou juste un select de certains champs?

Discussions similaires

  1. L'équivalent de FULL OUTER JOIN sous ACCESS
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/03/2013, 12h36
  2. Erreur FULL OUTER JOIN
    Par SwiTz dans le forum Requêtes
    Réponses: 14
    Dernier message: 02/04/2009, 13h33
  3. [Oracle 9] Probleme. FULL OUTER JOIN
    Par West01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/10/2006, 07h46
  4. [ORACLE 9i] Equivalent du Full Outer Join
    Par Worldofdada dans le forum Oracle
    Réponses: 10
    Dernier message: 02/11/2005, 14h56
  5. Remplacer FULL OUTER JOIN
    Par funrighd dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2004, 10h54

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