Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie ziehe ich Informationen aus verschiedenen Tabellen? (https://www.delphipraxis.net/11972-wie-ziehe-ich-informationen-aus-verschiedenen-tabellen.html)

mjenke 18. Nov 2003 06:43


Wie ziehe ich Informationen aus verschiedenen Tabellen?
 
Guten Morgen an alle!

Zur Zeit erstelle ich mit Delphi eine Applikation, die Abläufe in einer Reitschule abbilden soll. Grundsätzlich funktioniert auch alles, allerdings gehe ich an manchen Stellen komplizierte Wege, die mir nicht gefallen. Will heissen, ich suche mir Ergebnismengen aus Datenbank, werte die dann weiter aus, führe weitere Queries durch, wenn ich der Meinung bin, dass das nötig sei etc. Das bedeutet natürlich eine gewaltige Belastung der Datenbank. Daher möchte ich einige Queries ausbauen, damit mir Ergebnisse in EINEM Aufwasch geliefert werden, und nicht in vielen Einzelschritten. Dabei stosse ich allerdings auf ein Problem, das ich anhand der untenstehenden, abgespeckten, Beispieltabellen erläutern möchte. Vielleicht kann mir jemand von Euch auf die Sprünge helfen, denn mein SQL (ich benutze übrigens Paradox-Tabellen über die BDE) reicht bisher noch nicht aus, um das Problem allein zu lösen...

Folgendes Problem:

Nehmen wir an, ich habe folgende vier Tabellen, und die Tabelle tcard ist meine Ausgangsbasis, von der ich Informationen holen möchte. An Informationen brauchen ich zu jedem Eintrag (wenn vorhanden) den Nachnamen und Vornamen des Benutzers, den Namen und Vornamen des Lehrers, den Namen des Pferdes und die Start- und Endzeit des Unterrichts.

Code:
tperson
+-----+------------+------------+
| PID | Name      | Firstname |
+-----+------------+------------+
| 1   | Jenke     | Matthias  |
+-----+------------+------------+
| 2   | Mustermann | Karl      |
+-----+------------+------------+

tcard
+-----+--------+----------+--------+
| CID | IDUser | IDLesson | Number |
+-----+--------+----------+--------+
| 1   |        |          | a01    |
+-----+--------+----------+--------+
| 2   | 1      | 1        | a01    |
+-----+--------+----------+--------+
| 3   |        |          | a01    |
+-----+--------+----------+--------+

thorse
+-----+------------+
| HID | Name      |
+-----+------------+
| 1   | Ariane    |
+-----+------------+
| 2   | Finesse   |
+-----+------------+

tlesson
+-----+---------+-----------+---------+-----------+-----------+
| LID | IDPupil | IDTeacher | IDHorse | StartTime | EndTime  |
+-----+---------+-----------+---------+-----------+-----------+
| 1   | 1       | 2         | 1       | 16:00:00  | 17:00:00  |
+-----+---------+-----------+---------+-----------+-----------+
Wenn es nur darum geht, den Namen des Users aus den Daten zu ziehen (wenn vorhanden) und die Spalten leer zu lassen, wenn kein User eingetragen ist, habe ich inzwischen herausgefunden:

SQL-Code:
SELECT DISTINCT t2.Name, t2.Firstname, t1.CID, t1.Number
FROM  tcard t1 LEFT JOIN tperson t2 ON t1.IDUser = t2.PID
WHERE t1.Number = "a01"
liefert folgendes Ergebnis:

Code:
+------------+-------------+-----+--------+
| Name      | Firstname  | CID | Number |
+------------+-------------+-----+--------+
|            |             | 3   | a01    |
+------------+-------------+-----+--------+
| Jenke     | Matthias   | 2   | a01    |
+------------+-------------+-----+--------+
|            |             | 3   | a01    |
+------------+-------------+-----+--------+
Womit ich Probleme habe, ist die Verbindung von tcard zu thorse herzustellen, unter Zwischenschaltung von tlesson. Wie kann ich das bewerkstelligen? Wohlgemerkt, ich will auch weiterhin ein Ergebnis zurückbekommen, in dem leere Felder möglich sind (siehe obiges Beispiel). Alle meine Versuche haben aber dazu geführt, dass ich entweder ALLE Pferde in der Ergebnismenge stehen hatte (und der Rest der Felder war dann leer, weil es keine Entsprechung des Pferdes in den anderen Daten gab), oder aber ich hatte plötzlich nur noch die eine Zeile, in der alle Informationen gegeben sind...

Für Hilfe wäre ich wirklich dankbar!

:-D
Matthias

mjenke 18. Nov 2003 06:45

Re: Wie ziehe ich Informationen aus verschiedenen Tabellen?
 
Ooops, Sorry!

In der ersten Zeile der Ergebnismenge heisst der Inhalt der Spalte CID natürlich "1". Da hat der Kopierfehlerteufel zugeschlagen...

:oops:
Matthias

Phoenix 18. Nov 2003 06:57

Re: Wie ziehe ich Informationen aus verschiedenen Tabellen?
 
Du kannst Joins hintereinanderhängen:

Code:
SELECT {..}
FROM tcard c LEFT JOIN tlesson l ON c.IDLesson = l.LID
LEFT JOIN thorse h ON l.IDHorse = h.HID
WHERE {..}

mjenke 19. Nov 2003 12:45

Re: Wie ziehe ich Informationen aus verschiedenen Tabellen?
 
Hallo Phoenix,

das war genau das, was ich brauchte. Meine Abfrage funktioniert jetzt wie gewünscht.
Super-Tipp! Vielen Dank

:-D
Matthias


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