Vinzenz Mai: Delete Abfrage

Beitrag lesen

Hallo Mika,

eine sehr schöne und exakte Beschreibung, dazu ein erläuterndes Beispiel - eine beispielhafte Problembeschreibung.

Nun möchte ich eine Abfrage, die alle Zeilen in Table session_pers sowie Table session_do löscht, deren sessionid in session NICHT mehr vorhanden ist.

Erster Fall: Zwei DELETE-Statements mit Subselect (mindestens MySQL 4.1.x)

  
DELETE                    -- Lösche alle Datensätze  
FROM session_pers         -- in der Tabelle session_pers  
WHERE sessionid NOT IN (  -- die keine Entsprechung  
    SELECT  
        sessionid         -- in der Tabelle  
    FROM session )        -- session haben  

Das zweite DELETE-Statement solltest Du nun selbst hinbekommen.

MySQL 4.0.x unterstützt keine Subselects, dort solltest Du statt dessen einen LEFT JOIN verwenden.

Seit MySQL 4.0.x wird die Multiple-Table-Syntax für DELETE unterstützt. Du könntest somit beides in einer Abfrage abhandeln.

Wenn Du InnoDB-Tabellen hast, dann könntest Du das viel cleverer mit Foreign-Key-Constraints lösen, genauer gesagt mit ON DELETE CASCADE. Somit übernimmt die Datenbankmanagementengine für Dich diese Aufräumarbeiten. In MySQL gibt es das leider nur für InnoDB, ab MySQL 3.23.44.

Wie Du meinen Ausführungen entnehmen kannst, ist es bei Fragen zu MySQL immer eine gute Idee, die genaue Version anzugeben - in Deinem Fall sogar die verwendete Tabellen-Engine.

Freundliche Grüße

Vinzenz