@Omata
Deine Version funktioniert in leicht geänderter Weise.
Teilweise waren die Tabellennamen anders.
Mit dieser Anweisung funktioniert die Abfrage richtig, dauert aber ziemlich lange.
Außerdem werde ich per Eingabeaufforderung nach Person.Name, Person.Vorname und Person.ID gefragt.
Aber ich möchte doch alle Personen ausgeben lassen.
Delphi-Quellcode:
SELECT Person.Name,
Person.Vorname,
Max(Kathegorie1.Kath1_datum) AS [Kath1],
Max(Kathegorie22.Kath22_datum) AS [Kath2],
Max(Kathegorie3.Kath3_datum) AS [Kath3],
Max(Kathegorie4.Kath4_datum) AS [Kath4]
FROM (((person
LEFT JOIN (pers_b_kath1 LEFT JOIN Kathegorie1 ON pers_b_kath1.kath1_id = Kathegorie1.kath1_id)
ON Person.id = pers_b_kath1.pers_id)
LEFT JOIN (pers_b_kath3 LEFT JOIN Kathegorie3 ON pers_b_kath3.kath3_id = Kathegorie3.kath3_id)
ON person.id = pers_b_kath3.pers_id)
LEFT JOIN (pers_b_kath4 LEFT JOIN Kathegorie4 ON pers_b_kath4.kath4_id = Kathegorie4.kath4_id)
ON person.id = pers_b_kath4.pers_id)
LEFT JOIN (pers_b_kath2 LEFT JOIN (Kathegorie21 LEFT JOIN Kathegorie22
ON Kathegorie21.Kath22_id = Kathegorie22.Kath22_id)
ON pers_b_kath2.kath21_id = Kathegorie21.kath21_id)
ON person.id = pers_b_kath2.pers_id
GROUP BY Person.Name, Person.Vorname;
Ausgabe:
Delphi-Quellcode:
Name Vorname Kath1 Kath2 Kath3 Kath4
Müller Peter 01.01.2005 02.02.2005 04.04.2005
Da die Abfrage zu lange dauerte, habe ich Person.id in Person.pers_id umbenannt, da die ID in der Tabelle Person Pers_ID heißt.
Jetzt geht die Abfrage richtig schnell, werde nur wieder nach Person.Name, Person.Vorname gefragt.
Allerdings gibt er bei einem leeren Feld irgendetwas aus.
Bei einem Feld, indem das Datum leer sein sollte, steht das MAX(Datum) der gesammten Tabelle Kathegorie3 drin, selbst, wenn dieses Datum gar nicht mit der Person verknüpft ist.
Delphi-Quellcode:
SELECT Person.Name,
Person.Vorname,
Max(Kathegorie1.Kath1_datum) AS [Kath1],
Max(Kathegorie22.Kath22_datum) AS [Kath2],
Max(Kathegorie3.Kath3_datum) AS [Kath3],
Max(Kathegorie4.Kath4_datum) AS [Kath4]
FROM (((person
LEFT JOIN (pers_b_kath1 LEFT JOIN Kathegorie1 ON pers_b_kath1.kath1_id = Kathegorie1.kath1_id)
ON Person.Pers_id = pers_b_kath1.pers_id)
LEFT JOIN (pers_b_kath3 LEFT JOIN Kathegorie3 ON pers_b_kath3.kath3_id = Kathegorie3.kath3_id)
ON person.pers_id = pers_b_kath3.pers_id)
LEFT JOIN (pers_b_kath4 LEFT JOIN Kathegorie4 ON pers_b_kath4.kath4_id = Kathegorie4.kath4_id)
ON person.pers_id = pers_b_kath4.pers_id)
LEFT JOIN (pers_b_kath2 LEFT JOIN (Kathegorie21 LEFT JOIN Kathegorie22
ON Kathegorie21.Kath22_id = Kathegorie22.Kath22_id)
ON pers_b_kath2.kath21_id = Kathegorie21.kath21_id)
ON person.pers_id = pers_b_kath2.pers_id
GROUP BY Person.Name, Person.Vorname;
Ausgabe:
Delphi-Quellcode:
Name Vorname Kath1 Kath2 Kath3 Kath4
Müller Peter 01.01.2005 02.02.2005 23.04.1994 04.04.2005
Kathegorie3 müßte aber leer sein.
(23.04.1994 ist das größte Datum in Kathegorie3.Kath3_Datum)
Ist da vielleicht eine Klammer falsch gesetzt oder eine Variable falsch benannt?
Gruß Sunfy