Schwierige Filterfunktion/Datensatzgruppen filtern

Hallo allerseits!

Ich habe hier gerade ein schwieriges Problem mit Access 97.
Und zwar geht es um eine Rezepturdatenbank in der im Wesentlichen zwei Tabellen miteinander verknüpft sind. Die Haupttabelle enthält allgemeine Angaben zur Rezeptur, die Detailtabelle enthält die zugehörigen Rezepturbestandteile. Haupttabelle und Detailtabelle sind dabei über eine Rezepturnummer 1:n-verknüpft, so dass zu jeder Rezeptur beliebig viele Rezepturbestandteile gespeichert werden können.

Das Problem taucht nun auf, wenn ich eine Rezeptur mit verschiedenen Bestandteilen suchen möchte. Am Besten verdeutliche ich das mal anhand eines Beispiels:

Zur Rezeptur 1 ist der Rezepturbestandteil Wasser gespeichert
Zur Rezeptur 2 ist der Rezepturbestandteil Salz gespeichert
Zur Rezeptur 3 ist der Rezepturbestandteil Wasser gespeichert
und
Zur Rezeptur 3 ist der Rezepturbestandteil Salz gespeichert

Mit einer Abfrage möchte ich nun die Rezepturen finden, die sowohl Salz als auch Wasser enthalten.
Wenn ich dazu aber als Kriterium für den Rezepturbestandteil „Wasser“ ODER „Salz“ eingebe, findet Access natürlich auch alle Rezepturen die nur Wasser oder nur Salz enthalten.
Wenn ich dagegen nach „Wasser“ UND „Salz“ frage, findet Access gar keine Rezeptur, da ja jeder Rezepturbestandteil in einem separaten Detaildatensatz steckt.

Wie kann ich Access nun beibrigen, alle Datensatzgruppen zurückzugeben, in denen die gesuchten Rezepturbestandteile auftauchen?

Gruß

Stefan

Hallo Stefan

Abstakt sieht die Lösung wie folgt aus:
select * from haupttabelle h, detailtabelle d1, detailtabelle d2
where h.id = d1.hid
and h.id = d2.hid
and d1.bestandteil = „wasser“
and d2.bestandteil = „salz“

Bitte melde dich falls diese Lösung für dich nicht klar ist.

Mit freundlichen Grüssen
Peter

Hallo Peter!

Erstmal vielen Dank für deinen Denkanstoß.

Abstakt sieht die Lösung wie folgt aus:
select * from haupttabelle h, detailtabelle d1, detailtabelle
d2
where h.id = d1.hid
and h.id = d2.hid
and d1.bestandteil = „wasser“
and d2.bestandteil = „salz“

Von der Abfragelogik war mir das soweit eigentlich klar. Wenn man das Problem nicht auf zwei Suchbegriffe beschränkt, dann muss die gleiche Rezepturnummer in der Bestandteiltabelle mit der gleichen Häufigkeit gefunden werden, wie die Anzahl der Suchkriterien, damit die Rezeptur in der Ergebnistabelle angezeigt wird.

Bitte melde dich falls diese Lösung für dich nicht klar ist.

Nach dem anfänglichen Gedanken „Das sieht ja ganz einfach aus“ und einigen Experimenten muss ich mir wohl eingestehen, dass bei mir mit der Beherrschung der SQL-Syntax doch nicht so weit her ist.
Was mich dabei am meisten irritiert ist die Tatsache, dass die Tabellen in der Abfrage über INNER LINK - Operationen verknüpft sind, so dass ich nicht weiß, welche Datensatznummern ich denn nun genau auf Identität prüfen muss.
Dazu kommt noch, dass ich in deinem Beispiel aus der Bedingung

where h.id = d1.hid
and h.id = d2.hid

nicht ganz schlau geworden bin. Was ist denn jetzt der Unterschied zwischen h.id und hid? Soll das ein Symbolischer Ausdruck für die Datensatz- bzw. Rezepturnummer sein, oder ist das ein reservierter Begriff in der SQL-Syntax?

Woher kann ich überhaupt erfahren, ob und wie solche komplexen Abfragen in SQL möglich sind? Die Access-Hilfe empfinde ich da nicht gerade allzu informativ.
Hast du da vielleicht einen guten Literaturtipp auf Lager?

Gruß

Stefan