Tổng hợp này sẽ không hoạt động trong Oracle SQL.
Trong Oracle đôi khi bạn có thể cập nhật một tham gia nếu các bảng là "chìa khóa bảo tồn", ví dụ:
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à chìa khóa chính của b
, ở đây tham gia là updateable bởi vì đối với mỗi hàng của A có tối đa một hàng từ B, do đó bản 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, bạn có thể sử dụng một bản cập nhật đơn giản với một điều kiện tồn tại, một cái gì đó như thế này:
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)
Nguồn
2012-02-23 10:30:32
Bạn có thể mở rộng câu trả lời của bạn để bao gồm một giải thích về mã của bạn? Nó giúp người đọc nhiều hơn bạn nghĩ. – gunr2171
'trong' từ khóa sẽ không hoạt động nếu có hơn 1000 bản ghi. Vì vậy, câu trả lời này không hợp lệ. –