![]() |
Datenbank: Access • Version: 2000 • Zugriff über: ADO Connection
SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?)
Hi Leutz,
Ich habe drei Tabellen.
SQL-Code:
Kathegorie1
-------------------- Kath1_ID AutoWert Kath1_Datum Datum ... usw Person -------------------- Pers_ID AutoWert Pers_Name Text Pers_b_Kath1 -------------------- Pers_b_Kath1_ID AutoWert Pers_ID Zahl Kath1_ID Zahl Pers_b_Kath1_Wertung Ja/Nein Die Tabellen Kathegorie1 und Person sind über die Tabelle Pers_b_Kath1 verknüpft. Es gibt verschiedene Ereignisse und ich möchte alle Personen mit dem Datum deren jewiligen letzten Anwesenheit bei einem Ereignis in der Kathegorie 1 ausgeben. Personen die noch keine Verknüpfung zu Kath1 haben also noch bei keinem Ereignis der Kath 1 waren sollen auch mit aufgelistet werden, das Datumsfeld dann aber entsprechend leer bleiben. kleines Beispiel:
SQL-Code:
Zum Schluss soll eine Tabelle herauskommen in der steht:
Tabelle Person Tabelle Kathegorie 1 Tabelle Pers_b_Kath1
P_ID P_Name Kath1_ID Kath1_Datum PbK1_ID P_ID K_ID PbK_Wertung -------------- ---------------------- -------------------------------- 1 Peter 10 10.12.2005 20 1 10 True 2 Fritz 11 11.12.2005 21 1 11 False 3 Gustav 12 12.12.2005 22 2 11 True 23 2 12 True
SQL-Code:
Diese Tabelle besagt uns,
P_ID P_Name Kath1_Datum Pbk_Wertung
-------------------------------------------- 1 Peter 11.12.2005 False 2 Fritz 12.12.2005 True 3 Gustav das Peter das letzte mal bei einem Ereignis der Kath1 am 11.12.2005 war, die Wertung = False ist das Fritz das letzte mal bei einem Ereignis der Kath1 am 10.12.2005 war, die Wertung = True ist das Gustav noch bei keinem Ereigniss der Kath1 dabei war. Mit der folgenden Abfrage lese ich die Daten aus den Tabellen aus:
SQL-Code:
Diese Abfrage funktioniert auch wunderbar, doch wie kann ich noch die Daten die zusätzlich in der Verknüpfungstabelle also Pers_b_Kath1 drin stehen mit auslesen?
SELECT Max(Kathegorie1.Kath1_Datum) AS Kath1_Datum,
Person.Pers_ID, Person.Pers_Name, Person.Pers_Vorname FROM Person LEFT JOIN (Pers_b_Kath1 LEFT JOIN Kathegorie1 ON Kathegorie1.Kath1_ID = Pers_b_Kath1.Kath1_ID) ON Person.Pers_ID = Pers_b_Kath1.Pers_ID GROUP BY Person.Pers_ID, Person.Pers_Name, Person.Pers_Vorname ORDER BY Max(Kathegorie1.Kath1_Datum); Wenn ich Pers_b_Kath1.Wertung mit in die Select Funktion schreibe, bekomme ich die Meldung, dass Pers_b_Kath1.Wertung nicht als Teil der Agregatfunktion eingeschlossen ist. Und wenn ich Pers_b_Kath1.Wertung mit in die Group By Klausel setze bekomme ich ja eine andere Ausgabe in der von jeder Person das letzte Ereignis von Kath1 mit Wertung = true und von derselben Person das letzte ereignis mit Wertung = false
SQL-Code:
Wie kann ich also die Daten der Verknüpfungstabelle ausgeben, ohne diese mit in die GOUP BY klausel aufnehmen zu müssen?
P_ID P_Name Kath1_Datum Pbk_Wertung
-------------------------------------------- 1 Peter 10.12.2005 True 1 Peter 11.12.2005 False 2 Fritz 12.12.2005 True 3 Gustav Gruß Sunfy |
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
hab mein Problem mal etwas genauer beschrieben.
Vielleicht könnt ihr mir jetzt besser helfen. Thnx Sunfy |
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
Also nach erstem Überfliegen gehe ich mal davon aus, dass Du Dich von group by verabschieden solltest.
Ein Ansatz könnte sein, Deinen Select mit einer where-Klausel zu versehen, wo in einem Sub-Select nach dem maximalen Datum zur aktuell betrachteten Person gesucht wird. (ohne Gewehr, äähhm, Gewähr) |
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
Ja, die Idee das Group By durch irgendetwas anderes zu ersetzten kam mir auch schon.
Aber bis jetzt habe ich noch keine mögliche Lösung für dieses Problem gefunden. Hatte schon versucht, mehrere Abfragen miteinander zu verknüpfen. Doch dabei mußte ich immer ein GROUP BY mit Werten aus der Tabelle Person_b_Kath1 durchführen. Hat von euch jeman eine Idee, wie man das Problem lösen könnte? Gruß Sunfy ps.: Die Tabelle Pers_b_Kath1 hat noch einen weiteren Eintrag Bemerkung, was bei einem Group By immer dazu führt dass ich unerwünschte Tupel erhalte.
SQL-Code:
Pers_b_Kath1
-------------------- Pers_b_Kath1_ID AutoWert Pers_ID Zahl Kath1_ID Zahl Pers_b_Kath1_Wertung Ja/Nein Pers_b_Kath1_Bemerkung Text |
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
Moin,
ich würde das mit einer Unterabfrage lösen. Wobei ich nicht weiss, ob Access das kann.
SQL-Code:
Das ist jetzt einfach mal so aus dem Kopf entsprungen. Wer Fehler findet, darf sie behalten.
SELECT Kathegorie1.Kath1_Datum,
Person.Pers_ID, Person.Pers_Name, Person.Pers_Vorname, Kathegorie1.Pbk_Wertung FROM Person LEFT JOIN (Pers_b_Kath1 LEFT JOIN Kathegorie1 ON Kathegorie1.Kath1_ID = Pers_b_Kath1.Kath1_ID) ON Person.Pers_ID = Pers_b_Kath1.Pers_ID WHERE Kathegorie1.Kath1_Datum = (SELECT Max(Kath1_Datum) FROM Kathegorie1 WHERE Kath1_ID = Pers_b_Kath1.Kath1_ID) ORDER BY Kathegorie1.Kath1_Datum; MfG Thorsten |
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
Zitat:
|
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
Oh ja, das hatte ich gar nicht gesehen. Du hattest das ja schon vorgeschlagen.
Ja, bei Access muss man immer vorsichtig sein. Was da geht oder eben nicht, ist nicht logisch und folgt auch keinem Standard. Besonders schlecht finde ich diese besch***** Klammerbildung bei den JOINs. MfG Thorsten |
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
Danke schonmal für eure Ideen, aber eine verschachtelte Select Anweisung hatte ich auch schon ausprobiert, funktioniert nur noch nicht ganz.
Mit der Abfrage von Omata
SQL-Code:
bekommt man alle Ereignisse der Personen heraus.
SELECT Kathegorie1.Kath1_Datum,
Person.Pers_ID, Person.Pers_Name, Person.Pers_Vorname, Pers_b_Kath1.Pers_b_Kath1_Wertung, Pers_b_Kath1.Pers_b_Kath1_Bemerkung 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 WHERE (((Kathegorie1.Kath1_Datum)=(SELECT Max(Kathegorie1.Kath1_Datum) FROM Kathegorie1 WHERE Kath1_ID = Pers_b_Kath1.Kath1_ID))) ORDER BY Kathegorie1.Kath1_Datum; d.h. wenn eine Person vier mal bei einem Kathegorie1-Ereignis eingetragen ist, werde auch alle vier Tupel ausgegeben und nicht nur das Tupel mit dem jeweils letzten Ereignis der Personen. Und daher meine Frage, wie man die Ergebnisse nach dem aktuellsten jeder PersonenID selektieren kann. GroupBy funktioniert ja nicht. |
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
Zitat:
|
Re: SQL-Abfrage (Daten aus Verknüpfungstabelle mit ausgeben?
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab mal die Datenbank mit Musterdaten gefüllt.
(ist gezippt attached) die ganzen zzz_Abfragen sind Müll, die braucht ihr nicht zu berücksichtigen. Da hab ich mal verschiedene Sachen ausprobiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 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-2025 by Thomas Breitkreuz