Hallo Georg!
Als Ergebnis will der Benutzer vielleicht alle Müllers aus den
Städten Köln, München und Frankfurt sehen.
Das kann man ja nicht einfach nur mit AND aneinanderreihen.
Wie organisiert man in solchen Fällen den Aufbau eines SQL
Befehls?
Das könnte heißen: Autsch.
Grundsätzlich: Das geht schon, wird aber relativ kompliziert (siehe unten „Anwender“). Tendentiell spielst Du mit Teilabfragen, die wieder zu einer Gesamtabfrage zusammengebastelt werden. Und für beide Abfragen würde ich den Verknüpfungsoperator einstellbar machen (nur AND und OR).
In einem (ersten) Schritt bastelst Du Dir wie gehabt eine Teilabfrage zusammen und verknüpft die getroffenen Einstellungen mit dem ersten Vergleichsoperator. Alle weiteren Teilabfragen werden analog gebaut, jedoch mit dem zweiten Vergleichsoperator verknüpft. Die Teilabfragen schließt Du in Klammern ein. Einzelne Terme der Teilabfrage zu verwalten und nachträglich zu ändern, wird relativ kompliziert (für Dich wie auch den Anwender); insofern würde ich zunächst nur die Funktion „Abfrage löschen“ anbieten.
Nach dem Einstellen einer Teilabfrage wird diese über Schaltfläche mit der Gesamtabfrage kombiniert, ggf. die Eingaben zurückgesetzt und auf eine weitere Teilabfrage gewartet. Erst mit einer zusätzlichen Schaltfläche „Gesamtabfrage ansehen“ oder so wird die Abfrage erstellt/gestartet.
So könnte eingestellt werden: „Müller AND München“ OR „Müller AND Frankfurt“ OR „Müller AND Köln“. Oder, wenn Du ein Feld öfter pro Teilabfrage definieren kannst, „Müller“ AND „Frankfurt OR München OR Köln“.
Aber pass auf folgendes auf: Die Anwender sollten den Unterschied zwischen AND und OR erklärt bekommen. Meine Anwender interpretieren das ganze nämlich intuitiv erst mal wie folgt:
„Ich will die Müllers aus Köln UND München haben“, also „München AND Köln“; dass sich das widerspricht, verstehen sie erst mal nicht. Da muss man denen erst mal beipulen, dass dann der „OR“-Operator zu verwenden ist (AND schränkt Auswahl ein, OR erweitert). Ich habe mal eine Abfrage gebastelt, die dann noch (auf Kundenwunsch) ein „Nicht“ für jedes Feld hatte, für diverse Felder außerdem einen Bereich (von-bis) usw. Das hat die meisten dann aber überfordert und war für 99,9% der gewünschten Abfragen nicht nötig.
Gruß, Manfred