2011-01-29 10 views
1

値が指定されていない列がそのまま残るように行の更新/置換を実行したいとします。 4列テーブルの場合:sqlは一部の列を残して行を更新/置換する

-- expecting row = 99|a|b|? 
replace into game_data (id, col_a, col_b) values (99, "a", "b"); 

-- expecting row = 99|a|b2|c < a remains unchanged 
replace into game_data (id, col_b, col_c) values (99, "b2", "c"); 

これは可能ですか?そうでない場合は、既存の行を抽出し、必要に応じてデータをマージして置換を実行する代わりに、データベースが実行する必要があるようなものがあると思われます。スキーマのこと?

(sqlite3のためのbashスクリプトから使用されている)

答えて

3

このように、UPDATEステートメントを使用:

UPDATE game_data 
    SET col_a = 'a', col_b = 'b' 
WHERE id= 99 

これは全て残して、99のIDと行のcol_aとcol_bの値を設定します他の列の値は変更されません。

(注:REPLACE()は文字列置換機能です)。

注:REPLACEは、残念なことに、異なるSQL方言の異なるものを意味します。

+0

クエリが機能することを考慮すると、 'REPLACE'は文字列関数ではないことが非常に明白です。ドキュメントを読む:http://www.sqlite.org/lang_replace.html –

+0

ああ、そうです。私はSQLの方言を混ぜています。それを指摘してくれてありがとう。 – payne

+0

私は好きなやり方で動作しますが、文を構築するのは苦痛になります。私は同じ問題の別の投稿に出くわしました。返信には2番目のステートメントが必要であり、構文は少し違っています。 2つの部分からなる第2のステートメントが必要ですか? http://stackoverflow.com/questions/4677066/sql-a-query-to-insert-new-record-or-replace-only-some-fields – hanlonj

関連する問題