![](/img/trans.png)
[英]SQL Case when at least one value equals value then set to value
[英]Oracle SQL - Update Set field to value Case When another field equals something
有沒有辦法讓這個更新只在另一個字段等於某個值的條件下發生? 即。 如果inv.nl_sch_chg = 1
我只想將inv.schedule_finish
設置為不同的值。
這是SET inv.schedule_finish = CASE WHEN inv.nl_sch_change = 1 THEN ... END CASE;
或者有更好的方法來實現這一目標嗎?
這是我目前的發言:
UPDATE INV_INVESTMENTS inv
SET inv.schedule_finish = (SELECT TRUNC(odf.nl_rev_enddate) + 1/(24*60*60)
FROM ODF_CA_CHANGE odf
JOIN RIM_RISKS_AND_ISSUES rim ON rim.ID = odf.ID
WHERE rim.ID = ${gel_objectInstanceId})
WHERE inv.ID = (SELECT rim.PK_ID
FROM RIM_RISKS_AND_ISSUES rim
JOIN INV_INVESTMENTS inv ON inv.ID = rim.PK_ID
JOIN ODF_CA_CHANGE odf ON odf.ID = rim.ID
WHERE odf.ID = ${gel_objectInstanceId});
謝天謝地
您只需將條件添加到where子句:
UPDATE INV_INVESTMENTS inv
SET inv.schedule_finish = (SELECT TRUNC(odf.nl_rev_enddate) + 1/(24*60*60)
FROM ODF_CA_CHANGE odf
JOIN RIM_RISKS_AND_ISSUES rim ON rim.ID = odf.ID
WHERE rim.ID = ${gel_objectInstanceId})
WHERE inv.ID = (SELECT rim.PK_ID
FROM RIM_RISKS_AND_ISSUES rim
JOIN INV_INVESTMENTS inv ON inv.ID = rim.PK_ID
JOIN ODF_CA_CHANGE odf ON odf.ID = rim.ID
WHERE odf.ID = ${gel_objectInstanceId})
AND inv.nl_sch_change = 1
這樣,只有inv.nl_sch_change = 1
的行才會更新,否則無論數據是否發生更改,都將更新所有行。 所以這應該稍快一些。
以下是我對您的查詢的觀察:
現在,來更好地處理這個問題。 您可以通過兩種方式處理此問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.