oracle更新查询

时间:2010-06-23 04:39:52

标签: oracle

  

可能重复:
  Oracle Multiple update Query

我有一个查询   从item中选择item_code,comp_code;

返回

item_code,    comp_code
 912001         01
 912001         04
 912002         01
 912002         02
 912002         03
 912003         01

我为每个项目提供了三个comp_code值。假设comp_1,comp_2,comp_3

现在我想更新表格,每个项目代码都会有这三个值。也就是说,每个项目将有三个条目,comp_code值为comp_1,comp_2,comp_3,如下面的o / p

item_code,    comp_code
 912001         comp_1
 912001         comp_2
 912001         comp_3
 912002         comp_1
 912002         comp_2
 912002         comp_3
 912003         comp_1
 912003         comp_2
 912003         comp_3

如何编写选择和更新这些值的单个查询

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全遵循你想要的......但是从图A到图B,你可以做到以下几点。

  1. 使用新值创建保留表
  2. 放下旧桌子
  3. 重命名保留表。
  4. 这当然没有考虑索引,权限等......

    SQL> @so_test
    SQL> DROP
      2    TABLE SO_TEST;
    
    Table dropped.
    
    SQL> 
    SQL> CREATE
      2    TABLE SO_TEST
      3    (
      4      ITEM_CODE NUMBER
      5    , COMP_CODE VARCHAR2 (10)
      6    );
    
    Table created.
    
    SQL> 
    SQL> INSERT
      2  INTO
      3    SO_TEST VALUES
      4    (
      5      912001
      6    ,'01'
      7    );
    
    1 row created.
    
    SQL> 
    SQL> INSERT
      2  INTO
      3    SO_TEST VALUES
      4    (
      5      912001
      6    ,'04'
      7    );
    
    1 row created.
    
    SQL> 
    SQL> INSERT
      2  INTO
      3    SO_TEST VALUES
      4    (
      5      912002
      6    ,'01'
      7    );
    
    1 row created.
    
    SQL> 
    SQL> INSERT
      2  INTO
      3    SO_TEST VALUES
      4    (
      5      912002
      6    ,'02'
      7    );
    
    1 row created.
    
    SQL> 
    SQL> INSERT
      2  INTO
      3    SO_TEST VALUES
      4    (
      5      912002
      6    ,'03'
      7    );
    
    1 row created.
    
    SQL> 
    SQL> INSERT
      2  INTO
      3    SO_TEST VALUES
      4    (
      5      912003
      6    ,'01'
      7    );
    
    1 row created.
    
    SQL> 
    SQL> CREATE
      2    TABLE SO_TEST_NEW AS
      3  SELECT
      4    A.ITEM_CODE AS ITEM_CODE
      5  , 'comp_'
      6    || B.N AS COMP_CODE
      7  FROM
      8    (
      9      SELECT
     10        ITEM_CODE
     11      FROM
     12        SO_TEST
     13      GROUP BY
     14        ITEM_CODE
     15    )
     16    A
     17  , (
     18      SELECT
     19        ROWNUM AS N
     20      FROM
     21        (
     22          SELECT
     23            1 X
     24          FROM
     25            DUAL
     26            CONNECT BY LEVEL <= 3
     27        )
     28    )
     29    B
     30  ORDER BY
     31    A.ITEM_CODE;
    
    Table created.
    
    SQL> 
    SQL> DROP
      2    TABLE SO_TEST;
    
    Table dropped.
    
    SQL> 
    SQL> ALTER TABLE SO_TEST_NEW RENAME TO SO_TEST;
    
    Table altered.
    
    SQL> 
    SQL> SELECT
      2    *
      3  FROM
      4    SO_TEST;
    
     ITEM_CODE COMP_CODE
    ---------- ---------------------------------------------
        912001 comp_1
        912001 comp_2
        912001 comp_3
        912002 comp_1
        912002 comp_3
        912002 comp_2
        912003 comp_1
        912003 comp_3
        912003 comp_2
    
    9 rows selected.
    
    SQL>