2012-02-23 27 views

Trả lời

15

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) 
0
update t T 
set T.value = 'value' 
where T.id in (select id from t T2, b B, c C, d D 
       where T2.id=B.id and B.id=C.id and C.id=D.id and D.key=1) 

-- t is the table name, T is the variable used to reffer to this table 
+1

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

+1

'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ệ. –

Các vấn đề liên quan