Ben: Komplexe SQL-Abfrage

Hallo zusammen

Ich habe ein Problem mit einer SQL-Abfrage. Ich habe folgende 2 Tabellen:

------------------
| release        |
------------------
| id             |
| version        |
| timestamp      |
------------------

------------------
| file           |
------------------
| release_id     |
| filename       |
| md5_hash       |
| new            |
| changed        |
| deleted        |
------------------

Zu einem Release können mehrere Files gehören. Kommt dann ein neuer Release, werden nur noch die geänderten, gelöschten oder neuen Files eingetragen.

Ich möchte nun alle zu einem Release gehörenden Files haben. Die setzen sich ja jetzt aus den vorhergehenden und evtl. aus dem aktuellen Release zusammen.

Ein neues File "überschreibt" immer ein altes, ich will also immer das neuste, sofern es zu einem Release mit der gesuchten oder einer früheren Version gehört.

Ich möchte also quasi alle Dateien mit verschiedenen Dateinamen des aktuellen oder der vorhergehenden Releases.
Zusätzlich möchte ich dann am Schluss noch diejenigen Files rausnehmen, welche gelöscht wurden.

Ich habe mir mal untenstehende Query überlegt, aber GROUP BY wird ja vor dem ORDER ausgeführt, somit bekomme ich dann nicht das aktuelle File, sondern nur die "File-Gruppe".

SELECT filename, md5_hash
FROM release AS r
LEFT JOIN file AS f
ON r.id=f.release_id
WHERE r.version <= 1.22
GROUP BY f.filename
HAVING f.deleted != 1
ORDER BY r.timestamp

Hat jemand eine Idee wie ich vorgehen soll?

Hoffentlich blickt ihr durch, was ich meine...

Danke & Gruss
Ben

  1. Hallo Ben,

    Ein neues File "überschreibt" immer ein altes, ich will also immer das neuste, sofern es zu einem Release mit der gesuchten oder einer früheren Version gehört.

    auch für Dein Problem sollte die Lösung korrelierte Unterabfrage lauten.
    Die "Ausgangstabelle" wäre der Join Deiner beiden Tabellen.

    Freundliche Grüße

    Vinzenz