2016-10-27 6 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はいDBはうまく設計されておらず、私はそれについて何もできません:( – 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'"; 
関連する問題