ฉันเจอสองตัวอย่างเกี่ยวกับ MERGE ที่มี DML แบบมีเงื่อนไข
MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*.01)
WHERE (S.salary <= 8000);
ฉันมักจะเข้าใจว่าใน MERGE
มีการแก้ไขเฉพาะตารางเป้าหมาย (D ที่นี่) เมื่อเราใส่ DML ใน WHEN
มันจะทำงานบนตารางเป้าหมาย D ดังนั้นในกรณีนี้ เงื่อนไขเกี่ยวข้องกับ S อย่างไร ดังเช่นในส่วนคำสั่ง DELETE
และ UPDATE
WHERE
จะเริ่มดำเนินการเมื่อใด ? หลังการจับคู่ ? บนแหล่งที่มา/เป้าหมายก่อน ON
?
อีกตัวอย่างที่เกี่ยวข้อง พร้อมอีกหนึ่งคำถาม
MERGE INTO destination d
USING source s
ON (s.id = d.id)
WHEN MATCHED THEN
UPDATE SET d.description = 'Updated',
d.status = 10
DELETE WHERE s.status = 10;
และ
MERGE INTO destination d
USING source s
ON (s.id = d.id)
WHEN MATCHED THEN
UPDATE SET d.description = 'Updated',
d.status = 10
DELETE WHERE d.status = 10;
ฉันไม่ได้รับความแตกต่างระหว่าง 2 สถานการณ์: ตารางแหล่งที่มาและเป้าหมายในส่วนคำสั่ง WHERE
ขอบคุณล่วงหน้า.