Helpex - Trao đổi & giúp đỡ Đăng nhập
2

Tôi có một bảng (giả sử ABC) có cấu trúc như sau:

 COMP_CODE    NAME    SALARY  SID1
-------------------------------------
  NULL      Alex     42000     85
  NULL      Alex     42000     89
  NULL      Alex     42000     96
  NULL      Alex     42000    100
  NULL      Alex     42000     52

Tôi muốn cập nhật cột _ COMP_CODE _ trong bảng trên từ giá trị nằm trong bảng khác (CC) . Các cột phù hợp giữa hai bảng là SID1 . Cấu trúc của CC như sau:

  COMP_CODE    SID1
----------------------
    0AA         85
    0AB         96
    0CD         98
    0DE         72
    0EH        100 

Điều này có thể đạt được thông qua CURSOR hoặc bất kỳ loại phương pháp nào khác.

2 hữu ích 4 bình luận 16k xem chia sẻ
2
MERGE INTO ABC t1
USING (select SID,max(COMP_CODE) COMP_CODE from CC GROUP BY SID) t2
ON (t1.SID1= t2.SID1)
WHEN MATCHED THEN 
UPDATE SET t1.COMP_CODE    = t2.COMP_CODE  
2 hữu ích 4 bình luận chia sẻ
1

Đầu tiên, không cần phải lưu trữ dữ liệu hai lần. Bạn chỉ có thể tìm nạp nó bằng cách sử dụng một JOINkhi bạn cần.

Bạn có thể cập nhật các giá trị như:

update abc
    set comp_code = (select cc.comp_code
                     from cc
                     where cc.sid1 = abc.sid1
                    );

Điều này sẽ cập nhật tất cả các hàng trong abc. Nếu sid1không khớp trong bảng thứ hai, thì giá trị sẽ vẫn còn NULL.

CHỈNH SỬA:

Bảng thứ hai của bạn có nhiều hàng có cùng giá trị. Bạn cần phải tìm ra cái nào bạn muốn. Để chọn một tùy chọn:

update abc
    set comp_code = (select cc.comp_code
                     from cc
                     where cc.sid1 = abc.sid1 and rownum = 1
                    );

Bạn cũng có thể chọn MIN(), MAX(), LISTAGG()hoặc một số kết hợp khác của các giá trị.

1 hữu ích 3 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ sql oracle plsql cursor dml , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading