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 :
et ca marchait
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))))
Des idées ?
Merci
Partager