joschilein
Multitalent
- 5 Mai 2006
- 1.393
- 151
Ich möchte bestimmte Zeilen aus zwei Tabellen löschen. Das Problem ist wieder stark vereinfacht dargestellt:
Die erste Tabelle heißt "maulwuerfe". Dort sind alle Maulwürfe gespeichert und alle haben eine eindeutige id. In der zweiten Tabelle "loecher", sind Informationen zu den von den Maulwürfen gegrabenen Löchern gespeichert, unter anderem gibt es dort auch eine Spalte, die die id des Maulwurfs beinhaltet, der dieses Loch gegraben hat.
Nun möchte ich eine Reihe von Maulwürfen löschen (beispielweise weil sie gesprochen wurden und von dieser Erde verschwinden) und gleichzeitig sollen alle ihre Löcher ebenfalls gelöscht werden.
(Die Realitätsnähe ist natürlich nicht wirklich gegeben
)
Es gäbe natürlich folgende Vorgehensweise:
1. SELECT id FROM maulwuerfe WHERE heilig=1
2. Schleife mit DELETE FROM loecher WHERE maulwurf=id
3. DELETE FROM maulwuerfe WHERE heilig=1
Da ich das gerne mit reinen SQL Mitteln lösen würde, käme folgende Zwischenlösung in Frage:
Allerdings werden damit nur die Löcher gelöscht und die Abfrage wird wohl auch bei jeder Zeile der loecher-Tabelle ausgeführt (?), also müsste man die Liste aus Nr.1 doch irgendwie Speichern können um sie dann weiterverwenden zu können.. nur wie?
Alternativ ist mir auch noch die Idee gekommen, ob ich nicht auf die Maulwurf-Tabelle einen Trigger setze, der bei der Löschung eines Maulwurfs automatisch die Löcher-Tabelle bearbeitet und dort die entsprechenden Zeilen löscht. Die Frage ist hier weniger, wie der Trigger für diese Aktionen aussehen muss, sondern generell wie empfehlenswert Trigger sind. Ich habe damit bisher keine Erfahrung und könnte mir vorstellen, dass gerade bei Namensänderungen von Spalten Fehler entstehen.
Die erste Tabelle heißt "maulwuerfe". Dort sind alle Maulwürfe gespeichert und alle haben eine eindeutige id. In der zweiten Tabelle "loecher", sind Informationen zu den von den Maulwürfen gegrabenen Löchern gespeichert, unter anderem gibt es dort auch eine Spalte, die die id des Maulwurfs beinhaltet, der dieses Loch gegraben hat.
Nun möchte ich eine Reihe von Maulwürfen löschen (beispielweise weil sie gesprochen wurden und von dieser Erde verschwinden) und gleichzeitig sollen alle ihre Löcher ebenfalls gelöscht werden.
(Die Realitätsnähe ist natürlich nicht wirklich gegeben
Es gäbe natürlich folgende Vorgehensweise:
1. SELECT id FROM maulwuerfe WHERE heilig=1
2. Schleife mit DELETE FROM loecher WHERE maulwurf=id
3. DELETE FROM maulwuerfe WHERE heilig=1
Da ich das gerne mit reinen SQL Mitteln lösen würde, käme folgende Zwischenlösung in Frage:
Code:
DELETE
FROM loecher
WHERE maulwurf = ANY(SELECT id
FROM maulwuerfe
WHERE heilig=1)
Alternativ ist mir auch noch die Idee gekommen, ob ich nicht auf die Maulwurf-Tabelle einen Trigger setze, der bei der Löschung eines Maulwurfs automatisch die Löcher-Tabelle bearbeitet und dort die entsprechenden Zeilen löscht. Die Frage ist hier weniger, wie der Trigger für diese Aktionen aussehen muss, sondern generell wie empfehlenswert Trigger sind. Ich habe damit bisher keine Erfahrung und könnte mir vorstellen, dass gerade bei Namensänderungen von Spalten Fehler entstehen.