2015-07-10 55 views
0

我有一个单列表, 我想修改原始表中的行并将它们作为新行插入。SQL修改并插入原始表中的新行

originalTable - >| xyz | 
       -------- 
       | abc1 | 

需要一个SQL专家来此查询重构为一个单一的SQL查询,如果possble,(这里是想我已经做了,

1)在这里,我创建两个单独的临时表来完成所有的处理

2),然后将它们加入到原始表,

我想消除这些表的创建,如果我能在单个语句执行所有的以下查询)

create table #tmp1(
xyz varchar(10) 
) 
create table #tmp2(
xyz varchar(10) 
) 

insert into #tmp1 (xyz) 
select xyz from originalTable 

insert into #tmp2 (xyz) 
select xyz from originalTable 

update #tmp1(xyz) 
select xyz = (SUBSTRING(xyz, 1, 8)) || 'P' 

update #tmp2(xyz) 
select xyz = (SUBSTRING(xyz, 1, 8)) || 'R' 

insert into #originalTable (xyz) 
select xyz from #tmp_1 
UNION 
select xyz from #tmp_2 

originalTable - > | xyz | 
        -------- 
        | abc1 | 
        | abcP | 
        | abcR | 
+0

您确定您使用的是MySQL吗? MySQL不使用'#'作为临时表,它使用'CREATE TEMPORARY TABLE'。 – Barmar

+0

它使用'CONCAT'函数进行连接,而不是'||'。你真的在使用什么RDBMS? – Barmar

回答

3

只需编写一个查询,返回所有子串连接,并将其用作INSERT语句中的源。

INSERT INTO originalTable (xyz) 
SELECT (SUBSTRING(xyz, 1, 8)) || 'P' 
FROM originalTable 
UNION 
SELECT (SUBSTRING(xyz, 1, 8)) || 'R' 
FROM originalTable