首頁 > 資料庫 > mysql教程 > 如何在Oracle中正確更新帶有內連接的表以避免ORA-00933?

如何在Oracle中正確更新帶有內連接的表以避免ORA-00933?

Barbara Streisand
發布: 2025-01-25 04:51:09
原創
920 人瀏覽過

How to Correctly Update Tables with Inner Joins in Oracle to Avoid ORA-00933?

> oracle更新帶有內在的加入:避免ORA-00933

>

>使用內部加入更新Oracle表時,常見錯誤是ORA-00933:“ SQL命令未正確結束。” 這是由於使用錯誤的語法而產生的。 MySQL(例如MySQL)中使用的標準語法在Oracle中不起作用。 UPDATE ... INNER JOIN ... SET ...

問題和Oracle的解決方案>

有問題的語法看起來像這樣:

<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 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>
登入後複製
>這使用一個子查詢來獲取更新的

>table2.CODEEXISTS>子句,以確保更新僅在匹配行中存在table2中才會發生。這阻止了試圖使用不存在的值更新引起的錯誤。

一種替代方法:內聯視圖>

另一個選項涉及使用內聯視圖:

<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中正確更新帶有內連接的表以避免ORA-00933?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板