Le cas est le suivant :

J'ai une table T3_TABLE_A2 et une jointure T3_JOIN_A2_A2 qui permet aux objets de la table T3_TABLE_A2 de pointer vers eux-mêmes.

Auparavant il y avait 1 seul champ PK sur la table T3_TABLE_A2 donc je m'en sortais, mais maintenant il y a 2 PK et ca se complique grandement (pour moi).

je veux les objets de T3_TABLE_A2 qui pointent (à travers la jointure)à vers un objet de T3_TABLE_A2 précis (0,0) ici pour simplifier.

J'encode avec un moteur ainsi :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
    select distinct T3_TABLE_A2.ID, T3_TABLE_A2.SITE_ID 
    from T3_TABLE_A2, T3_JOIN_A2_A2 
    where (((T3_JOIN_A2_A2.ID1=(T3_TABLE_A2.ID)) 
            and (T3_JOIN_A2_A2.SITE_ID1=(T3_TABLE_A2.SITE_ID))) 
            and ((T3_JOIN_A2_A2.ID2=0) 
            and (T3_JOIN_A2_A2.SITE_ID2=0)))

Ca "marche" mais me retourne trop de résultats : cela retourne tous les T3_TABLE_A2 qui CONTIENNENT mon objet cible (0,0) mais pas qui sont en EGALITE avec cette cible. Ceux qui pointent vers la cible + d'autres valeurs sont aussi retournés (j'ai un filtre contient au lieu d'égale).

Avec la double clé je ne vois pas trop comment faire : le code ci-dessous ne marche pas (aucun résultat) :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
  select distinct T3_TABLE_A2.ID, T3_TABLE_A2.SITE_ID 
    from T3_TABLE_A2, T3_JOIN_A2_A2 
    where (((T3_JOIN_A2_A2.ID1=(T3_TABLE_A2.ID)) 
            and (T3_JOIN_A2_A2.SITE_ID1=(T3_TABLE_A2.SITE_ID))) 
            and ((T3_JOIN_A2_A2.ID2=0) 
            and (T3_JOIN_A2_A2.SITE_ID2=0))
            and not exists (select * 
    from T3_TABLE_A2, T3_JOIN_A2_A2 
    where (((T3_JOIN_A2_A2.ID1=(T3_TABLE_A2.ID)) 
            and (T3_JOIN_A2_A2.SITE_ID1=(T3_TABLE_A2.SITE_ID))) 
            and ((T3_JOIN_A2_A2.ID2<>0) 
            or (T3_JOIN_A2_A2.SITE_ID2<>0)))))

avec une seule ID j'encodais ainsi :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
select distinct T3_TABLE_A.ID from T3_TABLE_A where 
(((ID in (select ID1 from T3_JOIN_A_A where (ID2=1))) and not exists (select ID1 from T3_JOIN_A_A LY_5 where (ID2<>1) and (ID=ID1))))
et ca marchait

Des idées ?
Merci