微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 .. join 删除 ..,postgresql 和 oracle 的语法相同

如何解决从 .. join 删除 ..,postgresql 和 oracle 的语法相同

我需要在 oracle 和 postgresql 上执行完全相同的查询,其中我需要使用表 2 上的连接从表 1 中删除行。 我已经有了一个有效的查询,但它停止为 oracle 工作,在“IN”语句中有 1000 多个结果。

delete from t1 
where
t1.oid IN 
(SELECT oid from t2 WHERE [condition])

我读过关于连接的文章,但 postgresql 使用了“using”关键字

DELETE [target table]  
FROM   [table1]  
       INNER JOIN [table2]  
ON     [table1.[joining column] = [table2].[joining column]  
WHERE  [condition] 

感谢任何帮助,谢谢

解决方法

Oracle 不支持 DELETE 语句的 JOIN 或 USING 或类似的东西。如果您需要在 Postgres 和 Oracle 上运行的东西,您唯一的选择是 INEXISTS

如果 IN 条件太慢,则尝试 EXISTS 条件:

delete from t1 
where exists (select * 
              from t2
              where t2.oid = t1.oid
                and [condition])
,

您可以使用多维 IN 表达式(最多可处理 100,000 个项目):

DELETE FROM t1 
WHERE ( t1.oid,1 ) IN ( SELECT oid,1 FROM t2 );

EXISTS(应该适用于任何数量的行):

DELETE FROM t1 
WHERE EXISTS ( SELECT 1 FROM t2 WHERE t1.oid = t2.oid );

并根据需要将 WHERE 条件添加到子查询中。

PostgreSQL db<>fiddle

Oracle db<>fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。