Hi,
da der Titel etwas merkwürdig anmutet hier eine etwas ausführlichere
Beschreibung:
Ich habe eine Link-Table, die mittels a_ref- und b_ref-Feldern eine
n:n-Beziehung realisiert.
1 | CREATE TABLE linktable ( a_ref INTEGER REFERENCES A(id)
|
2 | , b_ref INTEGER REFERENCES B(id)
|
3 | );
|
Jetzt möchte ich aber nicht anhand von einer a-id oder b-id die jeweils
zugeordneten Elemente aus der anderen Tabelle finden, sonern umgedreht:
ich habe eine Liste I mit b-ids (l_I - Länge [2-5]) und möchte wissen,
ob es eine a-id gibt, die mit genau all diesen (nicht mehr und nicht
weniger) b-ids verlinkt ist.
Ich komm einfach auf keine praktikable Lösung, habt ihr eine Idee?
Was mir eingefallen ist, wäre ein l_I-facher Join mit sich selbst auf
die a_ref und komplizierter Veroderung der Tests von b_ref gegen die
Listenelemente.
für den Fall l_I=2:
1 | SELECT t1.a_ref
|
2 | FROM linktable AS t1
|
3 | JOIN linktable AS t2
|
4 | ON (t1.a_ref = t2.a_ref)
|
5 | WHERE (t1.b_ref = I[0] AND t2.b_ref=I[1])
|
6 | OR (t1.b_ref = I[1] AND t2.b_ref=I[0]);
|
Das ist allerdings keine Praktikable Lösung, da bereis bei 3 Elementen,
die Joins riesig werden und die Whereklausel auch exponentiell wächst.
Außerdem ist damit auch noch nicht das Problem gelöst, dass ich nur
einen Treffer haben will, wenn es nur genau die beiden Einträge gibt.
Hat jemand eine bessere Idee?
Gruß
Vlad