2011-01-29 67 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 

这将设置为col_a和col_b值99 ID行,使所有其他列值不变。

(注意:REPLACE()是一个字符串替换函数)。

注意:不幸的是,REPLACE在不同的SQL方言中意味着不同的东西。

+0

考虑到查询甚至可以工作,应该非常明显的是`REPLACE`不是字符串函数。阅读文档:http://www.sqlite.org/lang_replace.html – 2011-01-29 13:50:05