我有以下查詢,其中我嘗試將所有內容都放在一起,以便我只需要執行一次優化查詢(oracle 12c DBMS)。在Oracle數據庫中通過加入選擇的更新行
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)
其中id在PersonStatus引用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)
我試圖在Oracle 12c中實現這一點。
它的工作原理,確實如此。額外的問題:我們可以使用連接來提高效率,而不是使用select子查詢嗎? – Simo
查看此[SO帖子](http://stackoverflow.com/questions/2446764/update-statement-with-inner-join-on-oracle)瞭解如何在Oracle中使用MERGE語句來連接表以更新數據。就效率而言,由於您使用的是EXISTS子句,因此可能不會那麼糟糕,您必須嘗試兩種方法並進行比較。如果你可以在這裏發佈你的比較結果會很好。 – vmachan