sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan sletter man data fra flere tabeller?

Hvis du har kontrol over dit skema, ville jeg få skemaet til at bruge cascading sletter .

Fra artiklen (den mere relevante del oversat til dit eksempel)

CREATE TABLE point
(
    pt_id integer PRIMARY KEY,
    evt_id integer REFERENCES event ON DELETE CASCADE
)

Hvis du har konfigureret kaskader, så kan du bare slette fra hovedbegivenhedstabellen, og alle de andre borde vil blive ryddet op automatisk

Ellers skal du først slette alle referencerne, derefter sletter du hovedtabellen. Du bør gøre dette i én transaktion for at holde data konsistente

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;


  1. spredning af mysql-data på tværs af flere diske

  2. LINQ til SQL hver n. række fra tabel

  3. connect_by_root tilsvarende i postgres

  4. MySQL-optimering ved filtrering af nøgleværdi-par som poster