Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select mit Unterabfrage?? (https://www.delphipraxis.net/84843-select-mit-unterabfrage.html)

TankWart 22. Jan 2007 16:59

Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOS

Select mit Unterabfrage??
 
Hallo Leute,
ich brauch schon wieder mal Hilfe.

Ich möchte aus einer Tabelle "sportler" alle Sportler anzeigen lassen,
und bei jedem Sportler der an einer bestimmten Veranstaltung teilnimmt,
das Feld "teilnehmen" mit Ja füllen.

So in der Art:
Zeig mir alle Teilnehmer
Wenn ein Teilnehmer an Veranstaltung 2 teilnimmt,
zeig mir im Feld Teilnehmen Ja.

Delphi-Quellcode:
SELECT * FROM team t
INNER JOIN team_sportler ts ON
t.TID = ts.TID
INNER JOIN sportler s ON
ts.SID = s.SID
Right OUTER JOIN sportler_event se ON
se.sid = s.sid INNER JOIN event e
ON e.eid = se.eid
Soweit habe ich das schon, das er alle Sportler anzeigt und wenn ein Wert in Tabelle
"event_sportler" vorhanden ist das er den auch mit anzeigt.

Nur, wie mach ich das jetzt, das er halt nur die Werte von "event_sportler" anzeigt,
wenn der Wert von Feld "eid" in "event_sportler" z.B. 2 ist.

Kann man das mit einer Abfrage lösen?
Oder muss ich da was in Delphi schreiben?


Dank schon mal im Voraus


Gruß

TankWart

hoika 22. Jan 2007 17:24

Re: Select mit Unterabfrage??
 
Hallo,

puh, machst du das kompliziert ;)

Zuerst mal, weg mit dem Select *
das macht das alles viel zu unübersichtlich

Was du hier nehmen solltest, sind subselects und unions.

Bsp (ohne jetzt deine Felder nud Tabellen zu benutzen)

SQL-Code:
Select S1.Name, 1 as Teilnehmen
From Sportler S1
where S1.SportlerId not in
  (select S2.SportlerId From Sportler S2
   join SportlerEvent on SportlerEvent.SportlerId=S2.SportlerId
   where SportlerEvent.EventId=2)

Union All

Select S1.Name, 2 as Teilnehmen
From Sportler S1
where S1.SportlerId in
  (select S2.SportlerId From Sportler S2
   join SportlerEvent on SportlerEvent.SportlerId=S2.SportlerId
   where SportlerEvent.EventId=2)
Erklärung
Die erste Query ermittelt alle Sportler,
die nicht (Not In) in Event 2 sind.
Das 1 as Teilnehmen erzeugt, erzuegt einfach die Zahl1.

Die zweite Query zeigt genau die anderen
Sportler an, die in Event2 waren.

Das Union All verknüpft beide Abfragen.
Es wird die Summe zurückgliefert.


Heiko

PS:
Bei Fragen bitte zuerst mal eine ordentliche Tabellenbeschreibung.

TankWart 22. Jan 2007 19:07

Re: Select mit Unterabfrage??
 
Danke Hoika,
das war genau das was ich gebraucht habe.

mfg
TankWart

:thumb:


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