Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

अद्यतन क्वेरी - Oracle

मैं अनुमान लगा रहा हूँ कि आप चाहते हैं

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)

अद्यतन:कॉलम और तालिका नामों में परिवर्तन के अलावा, मेरा प्रारंभिक उत्तर आपके द्वारा पोस्ट किए गए नमूना डेटा के साथ काम करता प्रतीत होता है। ध्यान दें कि डीडीएल और डीएमएल पोस्ट करना हमेशा आसान होता है ताकि हम आपके डेटा को डीडीएल और डीएमएल में बदलने के बजाय आपकी टेबल और डेटा को पुन:पेश कर सकें।

अगर मैं आपकी टेबल और डेटा बनाऊं

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.

फिर मेरे प्रारंभिक उत्तर से तालिका और कॉलम नामों को समायोजित करें, ऐसा प्रतीत होता है कि अद्यतन सही ढंग से काम करता है

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. Oracle - कई मानों के साथ प्रयोग करते समय क्लॉज प्रश्न में, इसे गतिशील बनाते हुए

  2. मौजूदा संग्रहीत कार्यविधि का उपयोग करके इकाई फ्रेमवर्क के माध्यम से Oracle डेटाबेस के लिए पहचान उत्पन्न करें

  3. ऑरैकल डेटाबेस से अद्वितीय बाधा कॉलम नाम प्राप्त करना

  4. pyparsing का उपयोग करके एक SQL को पायथन-पार्स करना

  5. दोहराए गए नाम खोजने के लिए लूप के माध्यम से पार करें