SQLite Update столбцы, только если значение не пустое - PullRequest
4 голосов
/ 22 марта 2012

Запрос: UPDATE item_table SET field1=field1_spanish, field2=field2_spanish;

Вопрос: Как мне обновить field1 ТОЛЬКО field1_spanish , если field1_spanish не пусто? Я хотел бы обновить field2 с помощью field2_spanish также, если field2_spanish не пусто.

Спасибо!

Ответы [ 2 ]

10 голосов
/ 22 марта 2012

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

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

Функция coalesce() вернет первый из переданных ей аргументов, который не является нулевым. Таким образом, в этом случае, поскольку 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
1 голос
/ 22 марта 2012

Предполагая, что все эти столбцы находятся в одной таблице:

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 не поддерживает предложение from в update оператор , так что вам придется выполнить коррелированный подзапрос. Предполагая, что table имеет первичный ключ id, на который ссылается table_spanish, вы можете сделать:

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 и вставить новые данные из промежуточной таблицы (обязательно используйте транзакцию для всего этого!).

Шляпный наконечник Мартину Клейтону для второго подхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...