# oracle: Abfrage aus einer n zu m Beziehung



## BastianX75 (8. Oktober 2008)

Hallo,

ich stehe hier grad irgendwie total auf dem Schlauch.

Ich habe 3 Tabellen

Tabelle A:
a_id
a_bezeichnung

Tabelle B:
b_id
b_bezeichnung

und eine Zuordnungstabelle Z:
a_id
b_id

In Z sind den a_id jeweils mehrere b_id zugeordnet.

Ich komme jetzt einfach nicht drauf, wie die Abfrage aussehen muß, wenn ich alle a_id haben möchte, die allen übergebenen b_id zugeordnet sind.


```
select a_id  from Z where b_id in (1, 2, 3) group by a_id
```
liefert mir alle a_id in denen mindestens eine der b_id vorhanden ist.

Wäre toll, wenn mir da mal einer auf die Sprünge helfen könnte.

Gruß Bastian


----------



## vfl_freak (8. Oktober 2008)

Hallo Bastian,
wenn ich Dich richtig verstanden habe, dann suchst Du dies hier:
http://www.tutorials.de/forum/relat...-aus-einer-m-n-beziehung-ziehen-aber-wie.html 
Gruß
Klaus


----------



## BastianX75 (8. Oktober 2008)

Hallo Klaus,

diesen Beitrag hatte ich schon gefunden. Leider hört es an der Stelle auf, an der es für mich interessant wird 

Mal als Beispiel

Tabelle A sind Filme, Tabelle B Schauspieler. In Z sind jedem Film mehrere Schauspieler zugeordnet.

Ich möchte jetzt alle Filme, in denen Richard Gere *und* Julia Roberts mitspielen.

Gruß Bastian


----------



## Cojote (8. Oktober 2008)

Das und klingt ziemlich tricky. Ich wüsste nicht wie man das mit einer statischen Abfrage für eine beliebig große Menge an b's realisiert.
Für ne dynamische Abfrage fällt mir spontan die Schnittmenge ein.

SELECT a_id from Z Where b_id=1
INTERSECT
SELECT a_id from Z WHERE b_id=2
INTERSECT
SELECT a_id from Z WHERE b_id=3


----------



## BastianX75 (9. Oktober 2008)

Hallo,

der Tip mit dem INTERSECT war schon mal gar nicht schlecht. Danke 

Ich habs jetzt folgendermaßen gemacht (geht etwas schneller)


```
SELECT a_id FROM Z WHERE b_id IN (1,2,3) GROUP BY a_id HAVING COUNT(a_id) = 3
```

das funktioniert allerdings nur, weil ich die Anzahl der b_id kenne.

Gruß Bastian


----------



## Cojote (9. Oktober 2008)

Interessante Lösung. Klingt schneller und ist besser erweiterbar für mehr b's.


----------

