Vinzenz Mai: korrelierte Unterabfrage

Beitrag lesen

Hallo Markus,

In kunden_main gibt es folgende Felder:
km_id
km_vorname
km_name
...

In kunden_status gibt es folgende Felder:
ks_id
ks_km_id (Die ID aus kunden_main / Fremschlüssel)
ks_status
ks_datum (Datum, wann der Status gesetzt wurde)

Nun möchte ich auf dem Bildschirm eine Liste mit allen Kundendaten ausgeben + den jeweils aktuellen Status (ID, Vorname, Name, Status, Datum).

Die Datenbankabfrage zum Erstellen der Liste möchte ich gerne ohne Schleife ausführen. Das heißt kunden_main und kunden_status sollen mit einem SELECT Befehl ausgelesen werden (JOIN). Funktioniert auch wunderbar, aber leider zeigt er mir für jeden Eintrag in kunden_status einen Datensatz an und nicht nur für den aktuellsten.

Du benötigst eine korrelierte Unterabfrage, sprich Deine MySQL-Version sollte >= 4.1 sein. Deswegen ist es bei MySQL-Fragen immer eine gute Idee, die Version mitanzugeben. Folgendes ungetestetes Statement sollte es tun:

SELECT  
  k.km_id,  
  k.km_vorname,  
  -- ...  
  s.ks_status,  
  s.ks_datum  
FROM kunden_main k  
INNER JOIN kunden_status ks  
ON k.km_id = s.ks_km_id  
WHERE s.ks_datum = (SELECT MAX(ks_datum) FROM kunden_status ks WHERE ks.ks_km_id = s.ks_km_id)  

Ist Deine Version älter, so kann Dir vielleicht folgender Archivthread weiterhelfen.

Freundliche Grüße

Vinzenz