2012-03-21 16 views
3

問合せ:UPDATE item_table SET field1=field1_spanish, field2=field2_spanish;SQLiteの更新列のみ値が空でない場合

質問:はどのように私はfield1_spanishが空でない場合にのみfield1_spanishfield1を更新することができますか? field2_spanishが空でない場合、field2field2_spanishに更新したいと思います。

ありがとうございます!

答えて

10

http://sqlfiddle.com/#!5/58554/1

update 
    item_table 
set 
    field1 = coalesce(field1_spanish, field1), 
    field2 = coalesce(field2_spanish, field2) 

coalesce()機能がnullではない、それに渡される引数の最初に戻ります。この場合、field2_spanishはnullなので、field2をfield2に設定します(基本的に何もしません)。

と空の文字列とNULL値をサポートするために、これを試してみてください。 http://sqlfiddle.com/#!5/b344f/3

update 
    item_table 
set 
    field1 = case when coalesce(field1_spanish, '') = '' then 
      field1 
      else 
      field1_spanish 
      end, 
    field2 = case when coalesce(field2_spanish, '') = '' then 
      field2 
      else 
      field2_spanish 
      end 
+4

BTW - sqlfiddle.comは私のサイト –

+0

すごいサイトと答え!ありがとう! – Fostah

+0

@JakeFeasel - 優れたサイト!しかし、私のバックボタンをハイジャックしないことを願っています... –

1

これらの列の全てが同じテーブル内にあると仮定すると:

update some_table 
set field1=field1_spanish, 
field2=field2_spanish 
where field1_spanish is not null 
and field2_spanish is not null; 

field1の場合とfield2をしていますtable*_spanishの列はtable_spanishにあります。次に、よく... SQLite doesn't support a from clause in an update statementです。したがって、相関サブクエリを実行する必要があります。 tabletable_spanishによって参照されるidの主キーを持っていると仮定すると、あなたが行うことができます:

update table a 
set field1=(select s.field1_spanish 
    from table_spanish s 
    where field1_spanish is not null 
    and s.id=a.id), 
field2=(select s.field2_spanish 
    from table_spanish s 
    where field2_spanish is not null 
    and s.id=a.id); 

それとも、参加を経由してステージング表を移入し、その後tableから関連するエントリを削除してから新しいデータを挿入することができますステージングテーブル(すべてのトランザクションを必ず使用してください!)第2の手法では、

Hat tip to martin claytonです。

関連する問題