Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cập nhật truy vấn - Oracle

Tôi đoán rằng bạn muốn

UPDATE table1 cs
   SET cs.abc = (SELECT tc.abc
                   FROM table2 cgl,
                        table3 tc
                  WHERE cgl.prd_id       = tc.prd_id
                    AND cgl.prd_ver      = tc.prd_ver
                    AND cgl.py_id        = tc.py_id
                    AND cgl.typ_id       = tc.tpy_id
                    AND cd.common_column = cgl.common_column)
 WHERE EXISTS (SELECT 1
                 FROM table2 cgl,
                      table3 tc
                WHERE cgl.prd_id       = tc.prd_id
                  AND cgl.prd_ver      = tc.prd_ver
                  AND cgl.py_id        = tc.py_id
                  AND cgl.typ_id       = tc.tpy_id
                  AND cd.common_column = cgl.common_column)

Cập nhật:Ngoài những thay đổi đối với tên cột và bảng, câu trả lời ban đầu của tôi dường như hoạt động với dữ liệu mẫu bạn đã đăng. Lưu ý rằng việc đăng DDL và DML luôn dễ dàng hơn để chúng tôi có thể tái tạo các bảng và dữ liệu của bạn hơn là yêu cầu chúng tôi chuyển đổi dữ liệu của bạn sang DDL và DML.

Nếu tôi tạo bảng và dữ liệu của bạn

SQL> create table table1 (
  2    prd_id number,
  3    prd_ver number,
  4    py_id number,
  5    typ_id number,
  6    column_used_for_update varchar2(10)
  7  );

Table created.

SQL> begin
  2    insert into table1 values( 1, 1, 1, 1, 'VALUE1' );
  3    insert into table1 values( 2, 3, 4, 5, 'VALUE2' );
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL> create table table2 (
  2    prd_id number,
  3    prd_ver number,
  4    py_id number,
  5    typ_id number,
  6    common_column varchar2(10)
  7  );

Table created.

SQL> begin
  2    insert into table2 values( 1, 1, 1, 1, 'A' );
  3    insert into table2 values( 1, 1, 1, 1, 'B' );
  4    insert into table2 values( 2, 3, 4, 5, 'C' );
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> create table table3 (
  2    common_column varchar2(10),
  3    column_to_update varchar2(10)
  4  );

Table created.

SQL> begin
  2    insert into table3 values( 'A', null );
  3    insert into table3 values( 'B', null );
  4    insert into table3 values( 'C', null );
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

Sau đó, điều chỉnh tên bảng và cột từ câu trả lời ban đầu của tôi, có vẻ như bản cập nhật hoạt động chính xác

SQL> ed
Wrote file afiedt.buf

  1  UPDATE table3 t3
  2     SET t3.column_to_update = (
  3                   SELECT t1.column_used_for_update
  4                     FROM table2 t2,
  5                          table1 t1
  6                    WHERE t1.prd_id        = t2.prd_id
  7                      AND t1.prd_ver       = t2.prd_ver
  8                      AND t1.py_id         = t2.py_id
  9                      AND t1.typ_id        = t2.typ_id
 10                      AND t3.common_column = t2.common_column)
 11   WHERE EXISTS (  SELECT 1
 12                     FROM table2 t2,
 13                          table1 t1
 14                    WHERE t1.prd_id        = t2.prd_id
 15                      AND t1.prd_ver       = t2.prd_ver
 16                      AND t1.py_id         = t2.py_id
 17                      AND t1.typ_id        = t2.typ_id
 18*                     AND t3.common_column = t2.common_column)
SQL> /

3 rows updated.

SQL> select * from table3;

COMMON_COL COLUMN_TO_
---------- ----------
A          VALUE1
B          VALUE1
C          VALUE2



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phát hiện xem một giá trị có chứa ít nhất một chữ số trong Oracle hay không

  2. Cách thực thi câu lệnh Oracle này trên JDBC

  3. Có thể tham chiếu đến tên cột thông qua các biến liên kết trong Oracle không?

  4. Sử dụng liên kết cơ sở dữ liệu Oracle mà không có SQL động không thể đọc được

  5. JMeter - Truyền nhiều giá trị từ 1 JDBC sang JDBC khác