Cú pháp này sẽ không hoạt động trong Oracle SQL.
Trong Oracle, bạn có thể cập nhật một phép nối nếu các bảng được "bảo toàn khóa", tức là:
UPDATE (SELECT a.val_a, b.val_b
FROM table a
JOIN table b ON a.b_pk = b.b_pk)
SET val_a = val_b
Giả sử rằng b_pk
là khóa chính của b
, ở đây có thể cập nhật tham gia vì đối với mỗi hàng A có tối đa một hàng từ B, do đó cập nhật là xác định.
Trong trường hợp của bạn vì giá trị được cập nhật không phụ thuộc vào bảng khác nên bạn có thể sử dụng một bản cập nhật đơn giản với điều kiện TỒN TẠI, giống như sau:
UPDATE mytable t
SET t.VALUE = 'value'
WHERE EXISTS
(SELECT NULL
FROM tableb b
INNER JOIN tablec c ON c.id = b.id
INNER JOIN tabled d ON d.id = c.id
WHERE t.id = b.id
AND d.key = 1)