2016-10-27 84 views
0

我想複製一行並將其插入到具有一些新值的同一張表上。問題是,我的表中有大約50列,所以我的查詢看起來有點愚蠢:重複並插入一行並進行一些修改

insert into DUMBTABLE (
, Col1 
, Col2 
, Col3 
-- 47 rows to go... 
. 
. 
, Col50) select 'new_val1' 
       ,'new_val2' 
       , Col3 
       -- 47 rows to go again... 
       . 
       . 
       . 
       , Col50 from DUMBTABLE where Col1 = 'old_val' 

有沒有更好的方式來動態地獲取所有列,並且可以指定whice的人會用新值進行更新?謝謝

ps:我將運行此查詢通過php。存儲過程目前不是一個選項。

+0

這就是要走的路。 (其他人怎麼知道哪些列要替換/保留?)然而,主要問題是爲什麼你的表有50列?設計不佳的數據庫? – jarlh

+0

@jarlh是數據庫設計得不好,沒有什麼我可以做的:( – RidRoid

+0

)如果你可以使用存儲過程,你可以考慮一個構建動態SQL來完成這個工作的過程,其中一些輸入參數指明瞭哪些列複製/修改。用普通的SQL我相信你不能 – Aleksej

回答

0

在我看來,你有50變量new_val1,new_val2,...,new_val50。如果這些變量具有值,則您希望新行在這些列中具有這些值,否則您希望保留重複的行列值。基於這些假設,請找到下面的代碼:

sql = "insert into DUMBTABLE (
, Col1 
, Col2 
, Col3 
-- 47 rows to go... 
. 
. 
, Col50) select " + new_val1 == null ? "col1," : "'" + new_val1 + "'," 
       + new_val2 == null ? "col2," : "'" + new_val2 + "'," 
       + new_val3 == null ? "col3," : "'" + new_val3 + "'," 
       -- 47 rows to go again... 
       . 
       . 
       . 
       + new_val50 == null ? "col50," : "'" + new_val50 + "'," 
    " from DUMBTABLE where Col1 = 'old_val'";