AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie ziehe ich Informationen aus verschiedenen Tabellen?

Wie ziehe ich Informationen aus verschiedenen Tabellen?

Ein Thema von mjenke · begonnen am 18. Nov 2003 · letzter Beitrag vom 19. Nov 2003
Antwort Antwort
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
mjenke

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

Re: Wie ziehe ich Informationen aus verschiedenen Tabellen?

  Alt 18. Nov 2003, 06:45
Ooops, Sorry!

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


Matthias
Matthias Jenke
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.605 Beiträge
 
#3

Re: Wie ziehe ich Informationen aus verschiedenen Tabellen?

  Alt 18. Nov 2003, 06:57
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 {..}
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
mjenke

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

Re: Wie ziehe ich Informationen aus verschiedenen Tabellen?

  Alt 19. Nov 2003, 12:45
Hallo Phoenix,

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


Matthias
Matthias Jenke
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 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