2015-07-10 60 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