在Oracle中使用INNER JOIN正確執行UPDATE查詢
MySQL中的以下查詢可以成功執行:
<code class="language-sql">UPDATE table1 INNER JOIN table2 ON table1.value = table2.DESC SET table1.value = table2.CODE WHERE table1.UPDATETYPE='blah';</code>
但是,在Oracle中運行相同的查詢會導致以下錯誤:
<code>SQL错误:ORA-00933:SQL命令未正确结束 00933. 00000 - "SQL command not properly ended"</code>
解決方案
該查詢中使用的語法在Oracle中無效。為了達到預期的結果,您可以使用以下方法之一:
第一種方法
<code class="language-sql">UPDATE table1 SET table1.value = (SELECT table2.CODE FROM table2 WHERE table1.value = table2.DESC) WHERE table1.UPDATETYPE='blah' AND EXISTS (SELECT table2.CODE FROM table2 WHERE table1.value = table2.DESC);</code>
此方法使用子查詢根據連接條件獲取table1.value的更新值。它確保只更新匹配的行。
第二種方法
<code class="language-sql">UPDATE (SELECT table1.value as OLD, table2.CODE as NEW FROM table1 INNER JOIN table2 ON table1.value = table2.DESC WHERE table1.UPDATETYPE='blah' ) t SET t.OLD = t.NEW;</code>
此方法使用可更新的內聯視圖來執行更新。它要求Oracle認為內聯視圖是可更新的,這取決於某些規則。
以上是如何使用Oracle中的內連接正確執行更新查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!