Einzelnen Beitrag anzeigen

mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#1

Wie ziehe ich Informationen aus verschiedenen Tabellen?

  Alt 18. Nov 2003, 06:43
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!


Matthias
Matthias Jenke
  Mit Zitat antworten Zitat