Entwickler-Ecke
Datenbanken - Unterabfragen - Ich brauch Eure Hilfe
rocco1980 - Fr 18.09.09 12:18
Titel: Unterabfragen - Ich brauch Eure Hilfe
Servus Gemeinde,
da ich mit meinem SQL Wissen noch nie so weit vorgedrungen war, habe ich mich nun festgefahren und bräuchte Eure Hilfe.
Das sind die Fakten :
Ich bin dabei eine DB unter Nutzung der BDE zu realisieren die aus 3 Tabellen besteht.
Tabelle 1 spiegelt einen Vorgang wieder ( ID_Tabelle1, Datum, Ereigniss, Bemerkungen, ID_Tabelle2, IDTabelle3)
Tabelle 2 spiegelt eine Namensliste wieder ( ID_Tabelle2, Name, Vorname )
Tabelle 3 spiegelt eine Hilfsmittelliste wieder ( IDTabelle3, TypHilfsmittel )
Tabelle 1 ist somit die Haupttabelle und ist mit Tabelle 2 und 3 jeweils über eine eindeutige ID verbunden.
Soweit auch kein Problem. Nun zu meiner Frage. Folgendes Szenario soll ermöglicht werden. Unter meinem Delphi Programm soll eine Suche stattfinden die aus einer Maske mit 3 Checkboxen besteht. Also Suche nach Datum, nach Name und nach Hilfsmittel. Nun soll der Nutzer variieren können. Also Suche nach Datum und Namen oder Suche nach Datum und Hilfsmittel oder Suche nach Namen und Hilfsmittel. Also mehrere Wege.
Da dies alles in einer Abfrage geschehen soll, bin ich nun soweit das dieses Szenario über eine Unterabfrage oder auch mehrere geschehen muss. Nun bin ich die ganze Zeit schon am tüfteln wie diese Unterabfrage aussehen soll, bzw. wie somit auch die gesamte Abfrage aussehen muss um jeweils die unterschiedlichen Suchen durchführen zu können. Später soll alles dann per Parameter aus Delphi übergeben werden, was ja das kleinste Übel ist.
Im Voraus schon mal dank für das lesen bis hier hin..
bis dahin der Rocco
mkinzler - Fr 18.09.09 12:26
Sollte durch einen klassischen Join über die Tabellen möglich sein
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Select ... from Tabelle1 t1 join Tabelle2 t2 on t2.ID_Tabelle2 = t1.ID_Tabelle2 join Tabelle3 t3 on t3.ID_Tabelle3 = t1.ID_Tabelle3 where ... ; |
rocco1980 - Fr 18.09.09 12:38
Das verbinden ist mir schon klar und ist auch schon gemacht. Doch das Problem liegt weiter unten. Ich muss für die Suche 3 WHERE Klauseln definieren. Nach Datum, nach Name und nach Hilfsmitteln. Verbinde ich die 3 Klauseln über AND so kann ich nur auf einen Fall reagieren, wenn der Nutzer im Programm alle drei Felder angibt zur Suche. Verknüpfe ich die Klauseln mit ANY so zeigt er mir nich das erhoffte Ergebniss.
Einfacher vielleicht formuliert : Ich bräuchte eine Abfrage in der Abfrage für die 4 Suchszenarien. Kenne das aus Access-Zeiten.
Critter - Fr 18.09.09 13:12
Hi,
ich schätze, du wirst die Unterscheidung im Delphi Quelltext machen. Hier kannst du dann entweder deine
Where Klausel dynamisch anpassen oder einen Filter auf das bereits gejointe Ergebnis setzen. Solltest du nicht wissen wie mal Filter oder Querys per Code setzt, kannst du es
hier [
http://www.delphi-library.de/topic_Mit+tTable+amp+tQuery+Arbeiten_363.html] nachlesen.
Critter
rocco1980 - Fr 18.09.09 13:15
Ich ahnte schon das es darauf hinauslaufen wird...mhhhh...ich lass das Thema noch offen. Vielleicht hat noch jemand eine Idee...
Guenter Forster - Fr 18.09.09 22:38
Ich hatte auch schon über Stunden mit leer und NIL - Werten herumgedocktert. Da ja mal am Programm ja auch was geändert werden werden könnte ist das dynamische über delphi flexibler. In Deinem fall ja auch nur ein kurzer String - Zusatz wie
sqlstr = 'from xxx joinxxx'
if ceck1.checked then sqlstr := sqlstr + 'Where xxx'
und so weiter.
Dann können leicht neue Chekboxen hinzugefügt werden.
Gruß Günter
rocco1980 - Mo 21.09.09 09:36
Vielen Dank den Lesern und Beantwortern. Ich habe es nun so gelöst und handel die Abfragen über Delphi und dem SQL-String ab. Vielen Dank...
der Rocco
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!