DELETE mit Ausnahme

Willi0513

Grünschnabel
Hallo zusammen,

ich möchte in meiner Tabelle 'anmeldungen' Datensätze anhand einer 'mitglieder_id' und einer 'termin_id' löschen.
Das Datum spielt auch eine Rolle, steht aber in der Tabelle 'termine'.
Ausnahme: Wenn die 'termin_id' auch in der Tabelle 'meldefrist' steht, soll der Datensatz nicht gelöscht werden.
Mit dem folgenden SELECT-Befehl bekomme ich nur die Datensätze angezeigt, die auch wirklich gelöscht werden sollen.

SQL:
SELECT T.termin
FROM anmeldungen A
INNER JOIN termine T ON A.id_termine_id = T.termin_id
WHERE T.termin >  '2013-10-23'
AND id_mitglieder_id =13
AND NOT 
EXISTS (
SELECT id_termin_id, meldefrist
FROM meldefrist AS M
WHERE M.id_termin_id = T.termin_id

Ich bekomme es aber nicht hin, diese Anweisung in eine DELETE-Anweisung umzubauen.
Wenn ich folgendes versuche:

SQL:
DELETE FROM anmeldungen
WHERE id_mitglieder_id IN
(SELECT T.termin_id
FROM anmeldungen A
INNER JOIN termine T ON A.id_termine_id = T.termin_id
WHERE T.termin >  '2013-10-23'
AND id_mitglieder_id =13
AND NOT 
EXISTS (
SELECT id_termin_id, meldefrist
FROM meldefrist AS M
WHERE M.id_termin_id = T.termin_id
))

bekomme ich folgende Fehlermeldung:

You can't specify target table 'anmeldungen' for update in FROM clause

Jemand eine Idee, wie die DELETE-Anweisung aussehen muss, damit genau die Datensätze gelöscht werden, die ich mit der SELECT-Anweisung heraus bekomme?

Ach ja, ich benutze MySQL.


Gruß
Willi
 
Zuletzt bearbeitet von einem Moderator:
Sorry,
aber ich habe nur
Code:
...
gefunden.
Habe es jetzt geändert.

Ich benutze MySQL, steht ganz unten.
Testen tue ich mit phpMyAdmin auf meinem lokalen Rechner.

Willi
 
Ich sag mal so, man muss nicht alles in einen SQL Befehl packen.

Du könntest auch einfach ersmtal alle löschbaren ermitteln, in eine Variable (programmierspache deiner wahl, wohl PHP, oder über stored procedure) packen.
und in einer 2ten Anweisung diese löschen.

Manchmal ist es sogar wirklich performanter bestimmte Bedingungen getrennt auszuwerten.
 
Hallo Spyke,
so mach ich es auch.
Ich dachte nur, dass man das auch mit einer Abfrage erschlagen kann, da mir die SELECT-Anweisung ja die entsprechenden Daten auswirft.
 

Neue Beiträge

Zurück