ฉันมีหนึ่งตาราง A มีคอลัมน์ (id, field_1, field_2) และอีกตาราง B มีคอลัมน์ (id, field_2)
ตอนนี้ฉันต้องการรวมตาราง B ถึง A นั่นหมายความว่าฉันต้องการอัปเดต field_2 ในตาราง A เป็นมูลค่าของตาราง B ดังนั้นจะนำไปใช้อย่างไร BTW ฉันใช้ Oracle
ขอบคุณ
ฉันมีหนึ่งตาราง A มีคอลัมน์ (id, field_1, field_2) และอีกตาราง B มีคอลัมน์ (id, field_2)
ตอนนี้ฉันต้องการรวมตาราง B ถึง A นั่นหมายความว่าฉันต้องการอัปเดต field_2 ในตาราง A เป็นมูลค่าของตาราง B ดังนั้นจะนำไปใช้อย่างไร BTW ฉันใช้ Oracle
ขอบคุณ
คำตอบ:
แนวทางอื่นในการสืบค้นย่อยที่เกี่ยวข้อง (แนะนำโดย Kerri) คือการใช้คำสั่ง MERGE ซึ่งอาจมีประสิทธิภาพมากกว่าการเลือกย่อย (ซึ่งสามารถตรวจสอบได้โดยดูที่แผนการดำเนินการของทั้งสองคำสั่ง)
MERGE INTO table_b
USING
(
SELECT id,
field_2
FROM table_a
) ta ON (ta.id = table_b.id)
WHEN MATCHED THEN UPDATE
SET table_b.field_2 = ta.field_2
MERGE
คำสั่งนี้คือคุณไม่สามารถอัปเดตคอลัมน์ที่เข้าร่วมได้นั่นคือคุณไม่สามารถอัปเดตคอลัมน์ที่ใช้ในส่วนON
คำสั่งได้
ORA-01555: snapshot too old
ไม่ว่าแน่ใจว่าสิ่งที่คุณหลังจากที่หนึ่งในนี้ แต่ควรทำงานเป็น one-off หรืออย่างต่อเนื่องผ่านทางงานที่กำหนดไว้:
UPDATE table_a a
SET field_2 = ( SELECT field_2
FROM table_b b
WHERE b.id = a.id )
;
ตอนนี้ทุกครั้งที่มีการดำเนินการข้างต้นมันจะทำมันข้ามแถวทั้งหมดในตาราง หากนี่คือสิ่งที่คุณต้องทำตลอดเวลาฉันจะแนะนำอย่างอื่น แต่สำหรับตารางแบบครั้งเดียวหรือน้อยมากควรจะเพียงพอ
ฉันทำสิ่งนี้ได้สำเร็จโดยใช้หนึ่งตารางใน user1 จากอีกตารางหนึ่งใน user2:
update user1.table1 a
set a.field1 = (
select b.field1
from user2.table2 b
where a.field1=b.field1
)
where <condition for update user1.table1>
คุณสามารถสร้างทริกเกอร์บน tableB ที่อัพเดท tableA ทุกครั้งที่ field_2 บน tableB ได้รับการอัพเดท ตรวจสอบที่นี่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างทริกเกอร์ - http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#BABCIBBJ