PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Supprimer en utilisant la jointure externe gauche dans Postgres

Comme d'autres l'ont noté, vous ne pouvez pas LEFT JOIN directement dans une instruction DELETE. Vous pouvez cependant effectuer une auto-jointure sur une clé primaire à la table cible avec une instruction USING, puis une jointure gauche sur cette table auto-jointe.

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;

Notez l'auto-jointure sur tv_episodes.id dans la clause WHERE. Cela évite l'itinéraire de sous-requête fourni ci-dessus.