ich habe ein zwei Tabellen, die über eine ManyToMany-Relation miteinander verknüft sind: Rezepten sind mehrere Zutaten zugeordnet. Jetzt möchte ich bei einer Liste aus Zutaten, die ich als Benutzereingabe erhalte, diejenigen Rezepte, deren Zutaten allesamt in dieser Liste enthalten sind. Ich möchte nicht die Rezepte, die zusätzlich mit Zutaten, welche nicht in der Liste auftauchen, verknüpft sind.
Ich habe mich in der Dokumentation umgesehen, speziell im Bereich “Row and Array Comparisons”, und dachte dabei stets an etwas in der folgenden Art (was natürlich nicht funktioniert):
… WHERE IN (3445,234,534,234, 3434) ALL (SELECT zutaten.id FROM zutaten WHERE zutaten.rezept_id = rezepte.id)
Habe ich mein Problem hinreichend geschildert und könnt ihr mir weiterhelfen?
Vielen Dank im Voraus
test=# select * from zutaten ;
zutat
---------
mehl
zucker
salz
butter
rosinen
ei
pfeffer
(7 Zeilen)
Zeit: 0,155 ms
test=*# select * from rezept;
rezept
--------
kuchen
rührei
(2 Zeilen)
Zeit: 0,222 ms
test=*# select * from rezept_zutat ;
rezept | zutat
--------+-------
rührei | ei
rührei | salz
kuchen | ei
kuchen | mehl
(4 Zeilen)
Zeit: 0,233 ms
test=*# select distinct rz.rezept from rezept_zutat rz where zutat in ('ei', 'salz') except select r.rezept from rezept r left join rezept_zutat rz on r.rezept=rz.rezept where rz.zutat not in ('ei', 'salz');
rezept
--------
rührei
(1 Zeile)
Zeit: 0,491 ms