我需要編寫一個更新查詢,其中我的SET引用外部聯接的表。
我可以用SQL Server很容易地做到這一點,但我有一段時間搞清楚Oracle中的語法,因爲我只允許在更新查詢中使用單個表。
我寫了下面的Oracle查詢:
UPDATE SalesExt_tmp tmp
SET slsrep = (SELECT three_dig_rep
FROM dw_sls_rep_conv sls
WHERE sls.aims_rep = tmp.slsrep)
WHERE EXISTS (SELECT three_dig_rep
FROM dw_sls_rep_conv sls
WHERE sls.aims_rep = tmp.slsrep)
AND tmp.sysind = 'AIM';
這需要交集的照顧,但我需要應對SalesExt_tmp沒有在dw_sls_rep_conv相當於匹配值(我打算添加一個case語句將空值設置爲默認值)。爲此,我需要將dw_sls_rep_conv設置爲外部聯接表。但這是我陷入困境的地方。
的SQL Server實例
在SQL Server中的解決方案是一塊蛋糕,你可以在更新查詢多個表:
UPDATE SalesExt_tmp tmp
LEFT JOIN dw_sls_rep_conv sls ON sls.aims_rep = tmp.slsrep
SET tmp.slsrep = sls.three_dig_rep
WHERE tmp.sysind = 'AIM';
但我不能爲生命我想出瞭如何在Oracle中做到這一點。我知道這個查詢將允許我的slsrep字段在某些情況下被設置爲NULL,這使我擔心這個操作可能不被允許。
問題
1)首先這是可能在Oracle中? (它應該是吧?)
2)我該如何重組我的查詢來解決這個問題?我猜我的WHERE EXISTS子句需要去...但我仍然堅持要在哪裏放置我的JOIN。
哇哦....那是那麼容易!這正是我想要做的......謝謝!我仍然試圖讓我的大腦圍繞着SQL Server和Oracle Update查詢之間的邏輯差異。但我現在知道這是如何工作的......我的WHERE條件設置了要更新的內容,我的SET定義了要更新的值。兩者之間的任何差異都將設置爲空。 – DanK