postgresql – 使用Postgres中的左外连接删除
发布时间:2020-12-13 16:19:15 所属栏目:百科 来源:网络整理
导读:我正在将数据库从 MySQL切换到Postgres SQL.在MySQL中工作的选择查询在Postgres中工作,但类似的删除查询不会. 我有两个数据表列出了某些备份文件所在的位置.现有数据(ed)和新数据(nd).该语法将选出现有数据,这些数据可能会指出文件位于现有数据表中的位置,并
我正在将数据库从
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.*这两个都在“ed”或附近呈现语法错误.类似的错误,如果我尝试没有ed的别名.如果我尝试 DELETE FROM tv_episodes AS ed LEFT JOIN data AS nd..... Postgres在“LEFT”或附近发回语法错误. 我被stumped,找不到很多关于删除查询使用特定于psql的连接.
正如其他人所说,你不能直接在DELETE语句中LEFT JOIN.但是,您可以使用USING语句自我加入目标表的主键,然后将其连接到该自连接表.
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; 注意在WHERE子句中的tv_episodes.id上的self join.这样可以避免上面提供的子查询路由. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |