Saya memiliki permintaan yang berfungsi baik di MySQL, tetapi ketika saya menjalankannya di Oracle saya mendapatkan kesalahan berikut:
Kesalahan SQL: ORA-00933: Perintah SQL tidak berakhir dengan benar
00933. 00000 - "Perintah SQL tidak berakhir dengan benar"
Pertanyaannya adalah:
UPDATE table1
INNER JOIN table2 ON table1.value = table2.DESC
SET table1.value = table2.CODE
WHERE table1.UPDATETYPE='blah';
sql
oracle
inner-join
ora-00933
pengguna169743
sumber
sumber
Jawaban:
Sintaks itu tidak valid di Oracle. Kamu bisa melakukan ini:
Atau Anda mungkin dapat melakukan ini:
Itu tergantung jika tampilan inline dianggap dapat diperbarui oleh Oracle ( Untuk dapat diperbarui untuk pernyataan kedua tergantung pada beberapa aturan yang tercantum di sini ).
sumber
Gunakan ini:
sumber
merge into table 1 t
dan sebagainya.ON
,trg
adalah alias untuk tabel master,table1
("luar" tabel oleh logika Anda), dansrc
referensiUSING
grup ("tabel dalam" oleh logika Anda). Tapi ya, mungkin bisa dirujuk lebih baik, tapi saya bisa mengikutinya.MERGE
denganWHERE
klausa:Anda memerlukan
WHERE
klausa karena kolom yang dirujuk dalamON
klausa tidak dapat diperbarui.sumber
sumber
Jangan gunakan beberapa jawaban di atas.
Beberapa menyarankan penggunaan SELECT bersarang, jangan lakukan itu, itu sangat lambat. Jika Anda memiliki banyak catatan untuk diperbarui, gunakan bergabung, jadi sesuatu seperti:
Lihat tautan ini untuk lebih jelasnya. http://geekswithblogs.net/WillSmith/archive/2008/06/18/oracle-update-with-join-again.aspx .
Juga, pastikan bahwa ada kunci utama pada semua tabel yang Anda gabungkan.
sumber
Seperti yang ditunjukkan di sini , sintaks umum untuk solusi pertama yang diusulkan oleh Tony Andrews adalah:
Saya pikir ini menarik terutama jika Anda ingin memperbarui lebih dari satu bidang.
sumber
Sintaks berikut ini berfungsi untuk saya.
sumber
SET
sedang melakukanREPLACE
dan saya mencoba mengosongkan string tertentu di kolom - ternyata Oracle memperlakukan''
sebagai null, dan bidang ini tidak dapat dibatalkan. Saya pikir sintaks hanya memperbarui tabel temp bukan yang asli, tapi saya salah.Menggunakan deskripsi alih-alih desc untuk table2,
sumber
Ini bekerja dengan baik oracle
sumber
t1.First_Name = t2.FirstName, t1.Last_Name = t2.LastName
pada tabel setelah mencocokkannya di kolom "UserName" (t1.UserName = t2.UserName
) untuk mengambil nama mereka dari tabel yang disebut UserInfo (select * from UserInfo) t2
). Basis data sedemikian rupa di mana ia menggunakan UserName sebagai kunci utama untuk UserInfo di mana-mana, alih-alih menempatkan FirstName dan LastName dalam tabel, secara langsung. Ini memperbaikinya!sumber
sumber
Sama seperti kelengkapan, dan karena kita berbicara Oracle, ini bisa melakukannya juga:
sumber
A dan B adalah bidang alias, Anda tidak perlu mengarahkan tabel.
sumber
sumber