【发布时间】:2014-02-09 17:56:00
【问题描述】:
我正在将数据库从 MySQL 切换到 Postgres SQL。在 MySQL 中有效的选择查询在 Postgres 中有效,但类似的删除查询无效。
我有两个数据表,其中列出了某些备份文件的位置。现有数据(ed)和新数据(nd)。此语法将挑选出可能说明文件在现有数据表中的位置的现有数据,将其与相同的文件名和路径进行匹配,但没有关于它在新数据中的位置的信息:
SELECT ed.id, ed.file_name, ed.cd_name, ed.path, nd.cd_name
FROM tv_episodes AS ed
LEFT OUTER JOIN data AS nd ON
ed.file_name = nd.file_name AND
ed.path = nd.path
WHERE ed.cd_name = 'MediaLibraryDrive' AND nd.cd_name IS NULL;
我希望使用以下语法运行删除查询:
DELETE ed
FROM tv_episodes AS ed
LEFT OUTER JOIN data AS nd ON
ed.file_name = nd.file_name AND
ed.path = nd.path
WHERE ed.cd_name = 'MediaLibraryDrive' AND nd.cd_name IS NULL;
我尝试过DELETE ed 和DELETE ed.*,它们都渲染syntax error at or near "ed"。如果我尝试不使用 ed 的别名,则会出现类似错误。如果我尝试
DELETE FROM tv_episodes AS ed
LEFT JOIN data AS nd.....
Postgres 发回syntax error at or near "LEFT"。
我很困惑,在使用特定于 psql 的连接的删除查询上找不到太多内容。
【问题讨论】:
-
值得检查@cimmanon 链接的问题(无论它是否重复) - 在我的情况下,
NOT EXISTS语法比这里的答案更适合我。
标签: postgresql