Dalam percubaan untuk mengemas kini lajur menggunakan operasi JOIN, pengecualian ditemui: ORA-00933: Perintah SQL tidak ditamatkan dengan betul. Pertanyaan berikut menggambarkan isu:
UPDATE tab1 SET tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total FROM table1 tab1, (SELECT tab3.name, tab3.add, SUM(tab2.amount) AS total FROM table2 tab2, table3 tab3, table4 tab4 WHERE tab2.id = tab3.id AND tab3.id = tab4.id AND tab4.indicator = 'Y' GROUP BY tab3.name, tab3.add ) t1 WHERE tab1.id = t1.id;
Untuk menyelesaikan ralat, pertanyaan harus menggunakan pernyataan MERGE dan bukannya KEMASKINI dengan subkueri. Pernyataan MERGE membenarkan kedua-dua kemas kini dan operasi sisipan dalam satu kenyataan. Pertanyaan yang diperbetulkan menggunakan MERGE ialah:
merge into table1 tab1 using ( SELECT tab3.name, tab3."add", SUM(tab2.amount) AS total FROM table2 tab2, table3 tab3 , table4 tab4 WHERE tab2.id = tab3.id AND tab3.id = tab4.id AND tab4.indicator ='Y' GROUP BY tab3.name, tab3."add" )t1 on(tab1.id = t1.id) when matched then update set tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total
Pernyataan MERGE ini menilai baris daripada jadual1 dan subkueri t1 pada tab syarat bergabung1.id = t1.id. Apabila padanan ditemui, ia mengemas kini lajur total_adjusted_cost dalam jadual1 dengan menambah jumlah nilai daripada subquery.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Lajur Jadual dengan betul menggunakan JOIN dalam Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!