Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengemas kini Jadual dengan Betul dengan Inner Joins dalam Oracle untuk Mengelakkan ORA-00933?

Bagaimana untuk Mengemas kini Jadual dengan Betul dengan Inner Joins dalam Oracle untuk Mengelakkan ORA-00933?

Barbara Streisand
Lepaskan: 2025-01-25 04:51:09
asal
872 orang telah melayarinya

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

KEMASKINI Oracle dengan INNER JOIN: Mengelakkan ORA-00933

Apabila mengemas kini jadual Oracle menggunakan cantuman dalaman, ralat biasa ialah ORA-00933: "Arahan SQL tidak ditamatkan dengan betul." Ini timbul daripada penggunaan sintaks yang salah. Sintaks UPDATE ... INNER JOIN ... SET ... standard yang digunakan dalam pangkalan data lain seperti MySQL tidak berfungsi secara langsung dalam Oracle.

Masalah dan Penyelesaian Oracle

Sintaks yang bermasalah kelihatan seperti ini:

<code class="language-sql">UPDATE table1
INNER JOIN table2 ON table1.value = table2.DESC
SET table1.value = table2.CODE
WHERE table1.UPDATETYPE='blah';</code>
Salin selepas log masuk

Oracle memerlukan pendekatan yang berbeza. Inilah kaedah yang betul:

<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>
Salin selepas log masuk

Ini menggunakan subkueri untuk mengambil nilai table2.CODE untuk kemas kini dan klausa EXISTS untuk memastikan kemas kini hanya berlaku apabila baris yang sepadan wujud dalam table2. Ini menghalang ralat yang disebabkan oleh percubaan untuk mengemas kini dengan nilai yang tidak wujud.

Kaedah Alternatif: Pandangan Sebaris

Pilihan lain melibatkan penggunaan paparan sebaris:

<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>
Salin selepas log masuk

Kejayaan kaedah ini bergantung pada sama ada Oracle menganggap paparan sebaris boleh dikemas kini, yang dikawal oleh peraturan pangkalan data tertentu. Kaedah sebelumnya biasanya lebih dipercayai. Pilih kaedah yang paling sesuai dengan keperluan anda dan sentiasa menguji dengan teliti.

Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Jadual dengan Betul dengan Inner Joins dalam Oracle untuk Mengelakkan ORA-00933?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan