简体   繁体   中英

Deleting rows from a join of two tables and rownum condition in Oracle DB

Learning PL/SQL with Oracle DB and trying to accomplish the following:

I have two tables a and b. I am joining them on id, add several conditions and then try removing resulting rows only from table a in a batch size of 1000. Base query looks like this:

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

This obviously doesn't work as I am trying to manipulate a view: “data manipulation operation not legal on this view”

How can I rewrite this?

you can only remote from a table, there now Need to do a join. you can handle it in a where clause if you Need

you delete Statement could be eg

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

You can write simple query which checks if the rows in TABLEA that are required to be deleted exists in TABLEB.

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM