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

Elimina usando il join esterno sinistro in Postgres

Come altri hanno notato, non puoi LEFT JOIN direttamente in un'istruzione DELETE. Puoi, tuttavia, unire automaticamente su una chiave primaria alla tabella di destinazione con un'istruzione USING, quindi unire a sinistra su quella tabella auto-unita.

DELETE FROM tv_episodes
USING tv_episodes AS ed
LEFT OUTER JOIN data AS nd ON
   ed.file_name = nd.file_name AND 
   ed.path = nd.path
WHERE
   tv_episodes.id = ed.id AND
   ed.cd_name = 'MediaLibraryDrive' AND nd.cd_name IS NULL;

Nota il self join su tv_episodes.id nella clausola WHERE. Ciò evita il percorso della sottoquery fornito sopra.