PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Excluir usando junção externa esquerda no Postgres


Como outros notaram, você não pode LEFT JOIN diretamente em uma instrução DELETE. Você pode, no entanto, fazer uma autojunção em uma chave primária para a tabela de destino com uma instrução USING e, em seguida, fazer a junção à esquerda nessa tabela auto-juntada.
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;

Observe a autojunção em tv_episodes.id na cláusula WHERE. Isso evita a rota de subconsulta fornecida acima.