Se si ha il controllo sullo schema, farei utilizzare lo schema cascading deletes.
Dall'articolo (la parte più pertinente tradotto per il tuo esempio)
CREATE TABLE point
(
pt_id integer PRIMARY KEY,
evt_id integer REFERENCES event ON DELETE CASCADE
)
Se si dispone di cascate impostati, allora si può solo eliminare dal tavolo evento principale e tutti gli altri tavoli verrà ripulito automaticamente
Altrimenti, è necessario eliminare prima tutti i riferimenti, quindi eliminare la tabella principale. Si dovrebbe fare questo in una transazione per mantenere i dati coerenti
BEGIN;
DELETE FROM trace WHERE EXISTS
(SELECT 1 FROM point WHERE evt_id = 1139 AND trace.pt_id = point.pt_id);
DELETE FROM point where evt_id = 1139;
DELETE FROM magnitude where evt_id = 1139;
DELETE FROM event where evt_id = 1139;
COMMIT;
fonte
2012-04-13 17:11:11
Per quanto ne so, non è possibile eliminare da più tabelle come quella (ma potrei sbagliarmi). Tuttavia, almeno 'trace' non ha una colonna evt_id –
Il database si trova sul server. Come eseguo questo file di query? – user1202766
Sì, questa traccia vera non ha una colonna evt_id ma ha pt_id che è dalla tabella dei punti che ha la colonna evt_id..che è confusa! – user1202766