Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Benötige Hilfe bei komplexer SQL Abfrage (https://www.delphipraxis.net/51294-benoetige-hilfe-bei-komplexer-sql-abfrage.html)

sunfy 10. Aug 2005 15:38

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:
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

omata 10. Aug 2005 15:44

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

sunfy 10. Aug 2005 16:15

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 11:31 Uhr.
Seite 2 von 2     12   

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