![]() |
Re: Benötige Hilfe bei komplexer SQL Abfrage
@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:
Ausgabe:
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;
Delphi-Quellcode:
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.
Name Vorname Kath1 Kath2 Kath3 Kath4
Müller Peter 01.01.2005 02.02.2005 04.04.2005 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:
Ausgabe:
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;
Delphi-Quellcode:
Kathegorie3 müßte aber leer sein.
Name Vorname Kath1 Kath2 Kath3 Kath4
Müller Peter 01.01.2005 02.02.2005 23.04.1994 04.04.2005 (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 |
Re: Benötige Hilfe bei komplexer SQL Abfrage
ich habe mir einfach mal deine Datenbank angelegt, um besser testen zu können. Die Namen habe ich aber nicht zu 100% übernommen - sorry.
Er fragt dich nach Name und Vorname, weil es diese Spalten nicht gibt. Aus deinen Beziehungen ist ersichtlich, dass diese Spalten Pers_Name und Pers_Vorname heissen. Oder sehe ich da jetzt was falsch? MfG Thorsten |
Re: Benötige Hilfe bei komplexer SQL Abfrage
ups, da hast du Recht.
Kennst meine Datenbank schon besser als ich =) Supi, jetzt funktioniert es schon fast so wie ich es zum Schluß benötige. Auch die Zeit ist kein Problem mehr. Jetzt muß ich nur noch zusehen, dass nur die Datum-Datensätze einbezogen werden, bei denen das jeweilige KathegorieX.KathX_Wertung = true ist. Gruß Sunfy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz