2015-03-31 63 views
1

我有一个名为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 

“很简单只需要添加一个循环,并做”你的想象。但是,这里有... 我只需要一条语句就可以做到这一点。有没有办法做到这一点?怎么样?

回答

0

只要做一个普通的INSERT INTO..SELECT

例如,

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

COMMIT; 

SELECT * FROM user_options; 

TEST CASE

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

哇,我觉得愚蠢的,这是很简单的...谢谢。 – SaintLike 2015-03-31 11:51:01

0

尝试此

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

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; 
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 

希望它可以帮助....

0

当你笛卡尔包含所有需要的USER_ID的user_options与表之间的连接,您将获得所需的结果

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

其中“USR”是名单的所有user_id。我只生成1,2 - 它可以通过级别条件进行修改。或者你可以加入包含这些user_id的表。

看看工作示例:

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

相关问题