我有以下查询,我试图在其中放入所有内容,以便只需要执行一次查询即可进行优化(oracle12cDBMS)。
update PersonStatus s
set s.status = 4
where exists (
select 1 from PersonStatus s1
inner join Person p
on s1.id = p.id
where p.details = 'california' and s1.status = 0 and s1.age in (1,2,3,4,5)
)
表格:
Person (id, details)
PersonStatus(id, status, age)
其中PersonStatus中的id引用Person中的id。请注意,我简化/重命名这些表只是为了演示。
基本上,我只想更新与现有条件匹配的行(…),但我似乎没有得到。
当我执行此操作时,它更新了表中的所有行,但我需要的是只更新给定列表中具有年龄的行(1,2,3,4,5)。这适用于Oracle 12c数据库。
知道为什么会这样吗?欢迎提出建议。
=====在MySQL中。我的以下查询工作正常:
update PersonStatus s
inner join Person p on s.id = p.id
set s.status = 4;
where p.details = 'california' and s.status = 0 and s.age in (1,2,3,4,5)
我试图在Oracle12c中实现这一点。
我认为下面修改的查询应该适用于
update PersonStatus s
set s.status = 4
where exists (select 1
from Person p
where s.id = p.id
and p.details = 'california'
)
and s.status = 0
and s.age in (1,2,3,4,5)
;
我认为您只需要一个相关的子查询。换句话说,在子查询中不需要PersonStatus
update PersonStatus s
set s.status = 4
where exists (select 1
from Person p
where s.id = p.id and
p.details = 'california' and
s.status = 0 and s.age in (1,2,3,4,5)
);
我猜这就是你想要的逻辑。