2011-01-29 1 views
1

Я хотел бы выполнить обновление/замену строки, чтобы столбцы, для которых значения не указаны, остаются такими, какими они были, например. для таблицы с четырьмя колонками:sql update/replace row, оставляющий некоторые столбцы незатронутыми

-- 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"); 

Возможно ли это? Если нет, я предполагаю, что альтернативой будет извлечение существующей строки, слияние данных по мере необходимости, а затем выполнение замены, но это похоже на что-то, что должен делать db? схема?

(для sqlite3 используется в Баш скрипт)

ответ

3

Используйте оператор UPDATE, как это:

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

Это позволит установить значения для col_a и col_b для строки с идентификатором 99, в результате чего все другие значения столбца не изменяются.

(ПРИМЕЧАНИЕ: REPLACE() является функцией замены строк).

ПРИМЕЧАНИЕ: REPLACE означает, к сожалению, разные вещи в разных диалектах SQL.

+0

Учитывая, что запрос работает даже, должно быть совершенно очевидно, что 'REPLACE' не является строковой. Прочтите документы: http://www.sqlite.org/lang_replace.html –

+0

А, правильно. Я смешиваю свои SQL-диалекты. Спасибо что подметил это. – payne

+0

, который действительно работает так, как мне бы хотелось, это будет боль, чтобы построить утверждение. Ive сталкивается с другим сообщением по той же проблеме, в ответе упоминается второе требование, требуемое, и синтаксис выглядит несколько иначе. требуется двухчастное второе заявление? http://stackoverflow.com/questions/4677066/sql-a-query-to-insert-new-record-or-replace-only-some-fields – hanlonj