复制表中的数据并更改值

时间:2015-03-31 11:33:20

标签: sql oracle

我有一个名为USER_OPTIONS的表。如果我用以下内容查询此表:

SELECT * FROM USER_OPTIONS

我得到以下结果:

enter image description here

现在,我需要将相同的值(A,1),(B,2),(C,3)等复制到同一个表中,但更改USER_ID值。 最终结果应该是:

2 A 1
2 B 2
2 C 3
2 D 4
2 E 5
2 F 6
3 A 1
3 B 2
3 C 3
3 D 4
3 E 5
3 F 6

"非常简单,只需添加一个循环即可完成#34;你可能认为。但抓住了...... 我只需要一个声明就可以做到这一点。有没有办法做到这一点?怎么样?

5 个答案:

答案 0 :(得分:0)

只需做一个简单的 INSERT INTO..SELECT

例如,

INSERT INTO user_options SELECT user_id + 1, code, code_value FROM user_options;

COMMIT;

SELECT * FROM user_options;

测试案例

SQL> SELECT * FROM user_options;

   USER_ID C CODE_VALUE
---------- - ----------
         2 A          1
         2 B          2
         2 C          3
         2 D          4
         2 E          5
         2 F          6

6 rows selected.

SQL>
SQL> INSERT INTO user_options SELECT user_id + 1, code, code_value FROM user_options;

6 rows created.

SQL>
SQL> COMMIT;

Commit complete.

SQL>
SQL> SELECT * FROM user_options ORDER BY 1, 2, 3;

   USER_ID C CODE_VALUE
---------- - ----------
         2 A          1
         2 B          2
         2 C          3
         2 D          4
         2 E          5
         2 F          6
         3 A          1
         3 B          2
         3 C          3
         3 D          4
         3 E          5
         3 F          6

12 rows selected.

SQL>

答案 1 :(得分:0)

试试这个

插入user_options从user_options中选择3,代码,code_value;

答案 2 :(得分:0)

您可以使用以下方式生成行:

select u.user_id, uo.code, uo.code_value
from (select 2 as user_id from dual union all select 3 as user_id from dual) u cross join
     user_options uo;

如果您只想将它​​们放在同一张表中:

insert into user_option(user_id, code, code_value)
    select 3, code, code_value
    from user_options
    where user_id = 2;

答案 3 :(得分:0)

您可以简单地交叉加入,根据您的方案,您可以拥有以下表格

  CREATE TABLE [dbo].[Userid] (
    [Id] INT NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
  );


  CREATE TABLE [dbo].[Code] (
    [Code]       VARCHAR (50) NOT NULL,
    [Code_Value] INT          NULL
  );

然后查询如下

    select * from userid,code order by Id,Code,Code_Value

希望它有所帮助......

答案 4 :(得分:0)

当您在user_options和包含所有所需user_id的表格之间进行笛卡尔联接时,您将获得所需的结果

select usr.user_id, o.code_,o.code_value from 
user_options o,
(select rownum user_id from dual connect by level <3 ) usr

在哪里&#34; usr&#34;是所有user_ids的列表。我只生成了1,2 - 它可以通过级别条件进行修改。或者您可以改为连接包含这些user_id的表。

看看工作示例:

http://sqlfiddle.com/#!4/bc096/10