PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Löschen mit Left Outer Join in Postgres

Wie andere angemerkt haben, können Sie LEFT JOIN nicht direkt in einer DELETE-Anweisung verwenden. Sie können jedoch mit einer USING-Anweisung einen Primärschlüssel mit der Zieltabelle selbst verknüpfen und dann mit dieser selbst verknüpften Tabelle einen Links-Join durchführen.

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;

Beachten Sie den Self Join auf tv_episodes.id in der WHERE-Klausel. Dies vermeidet die oben angegebene Route der Unterabfrage.