Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Brauche Hilfe bei einer SQl-Abfrage (https://www.delphipraxis.net/81192-brauche-hilfe-bei-einer-sql-abfrage.html)

tr909 22. Nov 2006 09:39

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

Brauche Hilfe bei einer SQl-Abfrage
 
So, ich habe mal wieder ein Problem mit einer Abfrage. Verkürzt habe ich zwei Tabellen, in einer sind Daten zu einer Akte und in der anderen die zugehörigen Vorgänge. Nun möchte ich mit einer Abfrage diejenigen Akten herausbekommen in denen ein bestimmter Vorgang vorkommt und ein bestimmter anderer fehlt. Hier mal ein kurzes Bespiel :
Zitat:

AktenID, Name
1, Akte1
2, Akte2
3, Akte3

VorgangID, Akte, Inhalt
1, 1, E1
2, 1, E2
3, 2, E1
4, 2, E3
5, 3, E1
6, 3, E2
In jeder Akte soll, wenn ein Vorgang mit dem Inhalt E1 vorkommt auch der Vorgang mit dem Inhalt E2 vorkommen. In dem Beispiel soll also Akte2 ausgegeben werden, weil auf diese die bedingung ja nicht zutrifft. Ich hoffe mir kann da jemand helfen.

Folgendes hatte ich schon mal probiert, aber das funktioniert wohl nicht.
SQL-Code:
SELECT Akte.* FROM Akte
WHERE AktenID IN

(
SELECT Akte FROM VORGANG
  WHERE Inhalt = "E2" AND VorgangID IN
  (
   SELECT VorgangID from Vorgang
      WHERE Inhalt = "E1"
  )
)
Gruß
tr909

marabu 22. Nov 2006 09:55

Re: Brauche Hilfe bei einer SQl-Abfrage
 
Hi,

vielleicht reicht ja schon so etwas:

SQL-Code:
select * 
from akten
where aktenid in (select akte from vorgaenge where inhalt = 'E1')
and aktenid not in (select akte from vorgaenge where inhalt = 'E2')
Getippt und nicht getestet.

Grüße vom marabu

tr909 22. Nov 2006 10:10

Re: Brauche Hilfe bei einer SQl-Abfrage
 
Genau so funktioniert es. Besten Dank

Aber gibts evtl noch eine Variante die etwas schneller ist?

Gruß
tr909

Gollum 22. Nov 2006 12:28

Re: Brauche Hilfe bei einer SQl-Abfrage
 
Hallo,

evtl. ist folgendes schneller:
SQL-Code:
SELECT
  akten.name, vorgang.inhalt
FROM
  akten INNER JOIN vorgang ON akten.aktenid = vorgang.akte
WHERE
  vorgang.inhalt Not In ("E1","E2");

marabu 22. Nov 2006 13:55

Re: Brauche Hilfe bei einer SQl-Abfrage
 
Vielleicht reicht ja zur Beschleunigung auch die Bereitstellung eines Index auf den relevanten Feldern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:53 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