我有一个名为USER_OPTIONS
的表。如果我用以下内容查询此表:
SELECT * FROM USER_OPTIONS
我得到以下结果:
现在,我需要将相同的值(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;你可能认为。但抓住了...... 我只需要一个声明就可以做到这一点。有没有办法做到这一点?怎么样?
答案 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的表。
看看工作示例: