带子查询的SQL语句怎么实现for update
有俩张表A,B,A为主表,B为子表,是1对多的关系。
需求是在A中搜出前 上限1000条 未处理 的数据和对应的子表数据,然后将主表状态改成 处理中,处理好后再将状态改成处理完成,这个过程中需要用for update来锁表。
我的sql语句思路是:
SELECT m.*,s.* FROM (
SELECT * FROM TBL_MAIN WHERE DEAL_FLAG = '0' and rownum<1001
)m
, TBL_SUB s
where m.id=s.id (for update of s.id)
括号内是我想锁表实现的地方,但由于存在子查询,所以不能锁主表,而现在这个锁子表又没什么用。
高人在哪里?
顺便说下另一种思路,就是分俩次来查,先查主表,然后根据差得的数据for循环再来查子表,这个耗费太大,实在没有办法时才考虑,暂时不采用。