从两个表的联接中删除行以及Oracle DB中的rownum条件

时间:2019-06-25 01:45:32

标签: sql database join plsql oracle11g

通过Oracle DB学习PL / SQL并尝试完成以下任务:

我有两个表a和b。我将它们加入id上,添加多个条件,然后尝试仅从表a中删除批处理大小为1000的结果行。基本查询如下:

DELETE (SELECT * 
        FROM SCHEMA.TABLEA a 
             INNER JOIN SCHEMA.TABLEB b ON a.b_id = b.id 
        WHERE par=0 AND ROWNUM <= 1000);

当我尝试操纵一个视图时,这显然不起作用:“对该视图进行数据操纵操作不合法”

我该如何重写呢?

2 个答案:

答案 0 :(得分:1)

您只能从表中进行远程操作,现在需要进行联接。如果需要,可以在where子句中处理它

您删除的对帐单可能是

DELETE from SCHEMA.TABLEA a
where a.id in (select b.id from SCHEMA.TABLEB b)
and par=0 AND ROWNUM <= 1000

答案 1 :(得分:0)

您可以编写简单的查询来检查TABLEB中是否需要删除TABLEA中的行。

DELETE
FROM schema.tablea a
WHERE par = 0
AND   EXISTS (SELECT 1 FROM schema.tableb b WHERE a.b_id = b.id)
AND   rownum <= 1000;