Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?) (https://www.delphipraxis.net/58921-sql-abfrage-daten-aus-verknuepfungstabelle-mit-ausgeben.html)

tomsel 16. Dez 2005 21:03

Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
 
SQL-Code:
SELECT Kathegorie1.Kath1_Datum, Person.Pers_ID, Person.Pers_Name, Person.Pers_Vorname, pk.Pers_b_Kath1_Wertung, pk.Pers_b_Kath1_Bemerkung
FROM Person LEFT JOIN (Pers_b_Kath1 pk LEFT JOIN Kathegorie1 ON pk.Kath1_ID = Kathegorie1.Kath1_ID) ON Person.Pers_ID = pk.Pers_ID

WHERE (((Kathegorie1.Kath1_Datum)=(

  SELECT Max(Kathegorie1.Kath1_Datum)                                  
  FROM Kathegorie1, Pers_b_Kath1
  WHERE Pers_b_Kath1.Pers_ID = pk.Pers_ID
  and Kathegorie1.Kath1_ID=Pers_b_Kath1.Kath1_ID)))

ORDER BY Kathegorie1.Kath1_Datum;
Im Subselect muß die datumsmäßig aktuellste Kategorie zur gerade betrachteten Person ermittelt werden. Bei meinem "Vorposter" fehlte in der Unterabfrage leider jeder Bezug zur Person.
Ich hoffe, das passt jetzt. Garantieren will ich mal lieber nichts, prüf es lieber selbst noch mal nach.

omata 16. Dez 2005 21:18

Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
 
Tja, das funktioniert zwar jetzt endlich.
Aber da sind dann nur die Personen drin, die auch in der Pers_b_Kath1 einen Eintrag haben.

Eigentlich ist das aber so eingestellt, dass alle Personen angezeigt werden sollen. Geht aber nicht.

Da sieht man mal wieder wie sch***** Access ist.

Ich habe jetzt drei Abfragen realisiert, die alle aufeinander aufbauen. Dann kann man das auch Access beibringen. Andere (richtige Datenbanken) können das in einer Abfrage.

Wie auch immer, probiers doch mal aus...

Abfrage "view_MaxDatum"
SQL-Code:
SELECT Pers_b_Kath1.Pers_ID,
       MAX(Kathegorie1.Kath1_Datum) AS [Max von Kath1_Datum]
FROM Kathegorie1 
INNER JOIN Pers_b_Kath1 
  ON Kathegorie1.Kath1_ID = Pers_b_Kath1.Kath1_ID
GROUP BY Pers_b_Kath1.Pers_ID;
Abfrage "view_MaxDatumInfos"
SQL-Code:
SELECT view_MaxDatum.Pers_ID,
       view_MaxDatum.[Max von Kath1_Datum],
       Pers_b_Kath1.Pers_b_Kath1_Wertung,
       Pers_b_Kath1.Pers_b_Kath1_Bemerkung
FROM (view_MaxDatum
      INNER JOIN Kathegorie1 
        ON view_MaxDatum.[Max von Kath1_Datum] = Kathegorie1.Kath1_Datum)
INNER JOIN Pers_b_Kath1 
  ON    (Pers_b_Kath1.Pers_ID = view_MaxDatum.Pers_ID)
     AND (Kathegorie1.Kath1_ID = Pers_b_Kath1.Kath1_ID);
Eigentliche Abfrage
SQL-Code:
SELECT Person.Pers_ID,
       Person.Pers_Name,
       view_MaxDatumInfos.[Max von Kath1_Datum],
       view_MaxDatumInfos.Pers_b_Kath1_Wertung,
       view_MaxDatumInfos.Pers_b_Kath1_Bemerkung
FROM Person
LEFT JOIN view_MaxDatumInfos
  ON Person.Pers_ID = view_MaxDatumInfos.Pers_ID
ORDER BY Person.Pers_Name;
Da weden dann alle Personen ausgegeben, mit den jeweils letzten Informationen aus Pers_b_Kath1.

MfG
Thorsten

tomsel 16. Dez 2005 21:28

Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
 
SQL-Code:
SELECT Kathegorie1.Kath1_Datum, Person.Pers_ID, Person.Pers_Name, Person.Pers_Vorname, pk.Pers_b_Kath1_Wertung, pk.Pers_b_Kath1_Bemerkung
FROM Person LEFT JOIN (Pers_b_Kath1 pk LEFT JOIN Kathegorie1 ON pk.Kath1_ID = Kathegorie1.Kath1_ID) ON Person.Pers_ID = pk.Pers_ID

WHERE (((Kathegorie1.Kath1_Datum)=(

  SELECT Max(Kathegorie1.Kath1_Datum)                                  
  FROM Kathegorie1, Pers_b_Kath1
  WHERE Pers_b_Kath1.Pers_ID = pk.Pers_ID
  and Kathegorie1.Kath1_ID=Pers_b_Kath1.Kath1_ID))

or pk.Pers_ID is null)

ORDER BY Kathegorie1.Kath1_Datum;
jetzt besser?

omata 16. Dez 2005 21:32

Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
 
Ja, das sieht doch gut aus.

Jetzt muss es nur noch sunfy gefallen.

Bis dann
Thorsten

sunfy 16. Dez 2005 23:56

Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
 
Hey, ihr seid Klasse.

Vielen, vielen Dank.
Hab grad mal den letzten Code von Tomsel ausprobiert und der liefert genau das, was ich die ganze Zeit versucht habe hinzubekommen.
Wer mich jetzt erstmal die verschiedenen Varianten durchlesen, was genau ihr für Ideen hattet.

Die letzte Idee von Tomsel, eine Where Abfrage von einem Speziell auf das Maximale Datum ausgerichteten Join zu machen ist klasse, da wäre ich so schnell nicht drauf gekommen.

Die aufeinander aufbauenden Abfragen von Omata funktionieren auch wunderbar.
Werd Sie mir gleich nochmal in Ruhe anschauen um zu verstehen, was genau sie jeweils machen, hab ich jetzt auf Anhieb noch nicht ganz verstanden.

Aber nochmals vielen Dank.
Habt mir sehr weitergeholfen.

Gruß Sunfy


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz