Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi mal wieder ne SQL-Abfrage (https://www.delphipraxis.net/67651-mal-wieder-ne-sql-abfrage.html)

tr909 18. Apr 2006 09:27

Datenbank: access • Version: 2000 • Zugriff über: ADO

mal wieder ne SQL-Abfrage
 
Hallo. Ich hänge mal wieder an einer SQL-Abfrage. Ich weiß auch gar nicht, ob das was ich mir wünsche in einer Abfrage möglich ist, aber schön wäre es.
Folgendes ist mein Problem.

Ich habe zwei Tabellen.
Akte und Vorgang.

mit folgenden Feldern

Akte.ID, Akte.Bemerkung
Vorgang.ID, Vorgang.Akte, Vorgang.Typ, Vorgang.Inhalt

Zu jeder Akte gibt es mehrere Vorgänge. In den Vorgängen wird dan die jeweilig Akten-ID in das Feld Akte eingetragen.

Was ich möchte ist folgendes:
Alle Vorgänge von allen Akten, bei denen kein Vorgang eines Bestimmten Typs vorhanden ist.
Also wenn in einer Akte z.B. ein Vorgang vom Typ 'Ende' ist, soll keiner der Vorgänge dieser Akte mit ausgegeben werden.

was ich schonmal probiert habe ist folgendes, aber das Problem ist, daß bei der Unterabfrage mehr wie ein Datensatz zurückgegeben wird. (genau das will ich ja auch)
Code:
SELECT Akte.ID, Akte.Bemerkung, Vorgang.ID, Vorgang.Akte, Vorgang.Typ, Vorgang.Inhalt
FROM Akte INNER JOIN Vorgang ON Akte.ID = Vorgang.Akte where Akte.ID <> (SELECT Akte.ID FROM Akte INNER JOIN Vorgang ON Akte.ID = Vorgang.Akte where Vorgang.Typ <> 'Ende');

Bin für jeden Tip dankbar.

Gruß
tr909

*edit*
Sollte natürlich auch Vorgang.Typ heißen. Funzt aber trotzdem nicht

fkerber 18. Apr 2006 09:30

Re: mal wieder ne SQL-Abfrage
 
HI!

Keine Ahnung, obs daran liegt, aber du schreibst immer Akte.xxx oder Vorgang.xxx, nur beim letzten steht einfach nur Typ.


Ciao Frederic

trashcandesign 18. Apr 2006 09:45

Re: mal wieder ne SQL-Abfrage
 
Hi, probiers mal anstatt mit
SQL-Code:
...where Akte.ID <> (SELECT ...
lieber mit
SQL-Code:
...where Akte.ID not in (SELECT ...
Gruß
trashcandesign

marabu 18. Apr 2006 09:52

Re: mal wieder ne SQL-Abfrage
 
Außerdem lässt sich das bestimmt noch etwas vereinfachen:

SQL-Code:
SELECT ...
FROM vorgaenge v, akten a
WHERE v.akten_id = a.id
AND a.id not in (
  SELECT akten_id FROM vorgaenge sub
  WHERE sub.typ = :typ
)
Grüße vom marabu

tr909 18. Apr 2006 10:06

Re: mal wieder ne SQL-Abfrage
 
Ja, das mit dem not in ist es gewesen. Macht ja auch Sinn bei einer Ergebiss-Menge.
Die Version von Marabu ist auch noch um einiges schneller als meine Variante. Habe meine nach ca 10. Minuten unter Vollast abgebrochen, da ich bis dahin noch kein Resultat hatte, bei der anderen hab ich aber schon nach kurzer Zeit was auf dem Schirm gehabt.

Tausend Dank.

*EDIT*
Habe gerade gemerkt, das die Geschwindigkeitssteigerung nur direkt in Access aufgetreten ist, bzw. Da schon im vorraus Ein "Teilergebnis" angezeigt wird. mein dataset ist derweil noch stark beschäftigt. Aber Hauptsache ist ich komme an die Daten ;)

Gruß
tr909


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz