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 :

[SQL2K] Jointure ou Where ?


Sujet :

MS SQL Server

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut [SQL2K] Jointure ou Where ?
    Bonjour,

    J'ai une requête qui (en simplifiant) effectue me ramène des couples de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT A.Name, A.Type, B.Name, B.Type
    FROM TAB_PERSONNE AS A
    INNER JOIN TAB_LIEN AS L ON A.ID = L.ID_P1
    INNER JOIN TAB_PERSONNE AS B ON L.ID_P1 = B.ID
    Je souhaiterais maintenant filtrer cette liste pour obtenir uniquement les couples dont LES DEUX A & B appartiennent à la même liste.

    J'ai essayé cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT A.Name, A.Type, B.Name, B.Type
    FROM TAB_PERSONNE AS A
    INNER JOIN TAB_LIEN AS L ON A.ID = L.ID_P1
    INNER JOIN TAB_PERSONNE AS B ON L.ID_P1 = B.ID
    WHERE A.ID IN (<REQ SOUS LISTE>) 
    AND B.ID IN (<REQ SOUS LISTE>)
    Mais cela ne me paraît pas top ...

    Est-ce que quelqu'un aurait une piste ?

    Merci !

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut je ne comprend pas ton besoin.
    Je souhaiterais maintenant filtrer cette liste pour obtenir uniquement les couples dont LES DEUX A & B appartiennent à la même liste.
    Une jointure INNER JOIN te renvoie les elements commun aux deux tables.

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    Justement j'essaye mais çà ne me ramène pas ce que je veux ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT A.Name, A.Type, B.Name, B.Type
    FROM TAB_PERSONNE AS A
    INNER JOIN TAB_LIEN AS L ON A.ID = L.ID_P1
    INNER JOIN TAB_PERSONNE AS B ON L.ID_P1 = B.ID
    INNER JOIN (<REQ_SOUS_LISTE>) AS R ON R.ID = A.ID AND R.ID = B.ID
    ==> Me ramène rien


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT A.Name, A.Type, B.Name, B.Type
    FROM TAB_PERSONNE AS A
    INNER JOIN TAB_LIEN AS L ON A.ID = L.ID_P1
    INNER JOIN TAB_PERSONNE AS B ON L.ID_P1 = B.ID
    INNER JOIN (<REQ_SOUS_LISTE>) AS R ON R.ID = A.ID OR R.ID = B.ID
    ==> Me ramène trop de chose ...

  4. #4
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Ce code n'est pas de sens
    Citation Envoyé par maitrebn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE A.ID IN (<REQ SOUS LISTE>) 
    AND B.ID IN (<REQ SOUS LISTE>)
    comme tu l'as découvert:
    Citation Envoyé par maitrebn
    Je souhaiterais maintenant filtrer cette liste pour obtenir uniquement les couples dont LES DEUX A & B appartiennent à la même liste.
    Pour faire cela il faut utiliser un EXISTS synchronisé avec la requête principale sur A.ID et B.ID dans le même EXISTS.

    Voir ce sujet : [SQL2K] IN / NOT IN sur plusieurs champs

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    Je suis désolé mais je n'arrive pas à reprendre l'exemple présenté pour mon cas ...

    En effet, mon but est de filtrer le résultat d'une jointure entre deux tables avec une troisième table ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT A.Name, A.Type, B.Name, B.Type
    FROM TAB_PERSONNE AS A
    INNER JOIN TAB_LIEN AS L ON A.ID = L.ID_P1
    INNER JOIN TAB_PERSONNE AS B ON L.ID_P1 = B.ID
    WHERE EXISTS (SELECT LIBELLE FROM (<REQ_SOUS_LISTE>)  AS SL WHERE A.ID = SL.ID AND B.ID =SL.ID
    Me ramène rien et si je met un OR me ramènée tout ...

    Je pense que la différence entre mon problème et l'autre est que dans mon cas ma table de filtrage ne contient qu'une seule colonne ... et pas deux comme indiqué dans l'autre solution...

    Il faudrait presque que ma sous liste ma ramène tous les couples possibles de libellé ...

    Je rapelle mon besoin ...

    J'ai une table de Personne qui sont liées (donc A.ID et B.ID sont différents) par une troisième.

    Je souhaite récupérer les A.ID et B.ID liés entre eux mais dont LES DEUX font parties de la même sous-liste ... (qui ne contient qu'un champ ID).

    Si quelqu'un a une piste ...

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    J'ai trouvé une solution pas top ...

    Je stocke dans une table temporaire le résultat de ma sous requête et je fais une double jointure ...

    Merci encore pour votre aide !

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

Discussions similaires

  1. [MySQL-5.5] Jointure et Where
    Par hiraku79 dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/02/2014, 14h55
  2. union ou jointure ? avec where
    Par rouxfab dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/07/2008, 12h11
  3. [SQL2K] jointure partielle avec un max
    Par Monstros Velu dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/10/2006, 10h14
  4. [Sondage] Jointures dans WHERE ou avec JOIN ?
    Par Rei Angelus dans le forum Langage SQL
    Réponses: 29
    Dernier message: 25/08/2006, 10h17
  5. [Requete] jointure externe -> where
    Par MrDuChnok dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/07/2004, 15h48

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