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

Langage SQL Discussion :

Problème d'auto-jointure (jointure N-N)


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème d'auto-jointure (jointure N-N)
    Bonjour,

    Voici une table T contenant les valeurs suivantes :

    Code : 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
    24
     
           ID1        ID2
    ---------- ----------
             1         10
             1         11
             1         12
             2         20
             2         21
             2         22
             3         30
             3         31
             3         32
             4         10
             4         11
             4         12
             5         10
             5         11
             5         12
             5         13
             6         10
             6         11
             7         10
             7         11
             7         13
    Je cherche la requête qui va me ramener tous les ID1 qui contiennent au moins les mêmes ID2 que ID1=1 (c'est à dire au moins 10,11,12)

    Concrètement, je voudrais ramener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
           ID1
    ----------
             4
             5
    Mes tests (non concluants) sont basés sur cette requête :

    Code : 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
    select distinct T1.ID1,T2.ID2
    from   T T1,T T2
    where  T2.ID2=T1.ID2
    and    T2.ID1=1
    and	 T1.ID1<>1;
     
           ID1        ID2
    ---------- ----------
             4         10
             4         11
             4         12
             5         10
             5         11
             5         12
             6         10
             6         11
             7         10
             7         11
    En y rajoutant des clause where pour éliminer certains enregistrements, mais rien de concluant...



    Si ça peut aider voici le script de création :

    Code : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    create table "T"
    (
       ID1 decimal(22),
       ID2 decimal(22)
    );
     
    insert into T (ID1,ID2) values (1,10);
    insert into T (ID1,ID2) values (1,11);
    insert into T (ID1,ID2) values (1,12);
     
    insert into T (ID1,ID2) values (2,20);
    insert into T (ID1,ID2) values (2,21);
    insert into T (ID1,ID2) values (2,22);
     
    insert into T (ID1,ID2) values (3,30);
    insert into T (ID1,ID2) values (3,31);
    insert into T (ID1,ID2) values (3,32);
     
    insert into T (ID1,ID2) values (4,10);
    insert into T (ID1,ID2) values (4,11);
    insert into T (ID1,ID2) values (4,12);
     
    insert into T (ID1,ID2) values (5,10);
    insert into T (ID1,ID2) values (5,11);
    insert into T (ID1,ID2) values (5,12);
    insert into T (ID1,ID2) values (5,13);
     
    insert into T (ID1,ID2) values (6,10);
    insert into T (ID1,ID2) values (6,11);
     
    insert into T (ID1,ID2) values (7,10);
    insert into T (ID1,ID2) values (7,11);
    insert into T (ID1,ID2) values (7,13);
    D'avance merci pour toute idée/remarque ...
    Jean-Baptiste.

    nb : je suis sur Oracle 10G

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Chez moi cette requête fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select id1
    from T
    where id2 in (select id2 from T where id1 = 1)
    and id1 <> 1
    group by id1
    having count(distinct id2) = (select count(*) from T where id1 = 1)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci Waldar,
    J'avais déjà essayé le count, mais pas en combinaison avec le having.
    Je vais tester sur ma base qui contient plus de données. Et passer la discussion en résolu.
    Merci encore.
    a+
    jb

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

Discussions similaires

  1. Problème avec auto jointure
    Par freud dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/10/2008, 00h28
  2. [SQL2005] [TSQL] Problème d'auto-jointure et *
    Par Invité dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/12/2007, 16h14
  3. Réponses: 2
    Dernier message: 10/10/2006, 18h59
  4. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 10h20
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33

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