Условное обновление в SQLite - PullRequest
       2

Условное обновление в SQLite

7 голосов
/ 26 февраля 2012

Могу ли я создать в SQLite оператор, подобный этому?

update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10

Есть ли рабочий синтаксис для этого?

Ответы [ 3 ]

16 голосов
/ 26 февраля 2012

A CASE оператор должен работать со следующим синтаксисом:

UPDATE
  books
SET number_of_page = CASE WHEN number_of_pages > 0 THEN (number_of_pages - 1) ELSE 0 END
WHERE whatever_condition
4 голосов
/ 26 февраля 2012

Разве это не равно этому утверждению?

update books set number_of_pages = number_of_pages - 1 where number_of_pages>0

Edit:

согласно новому заявлению:

update books set number_of_pages = number_of_pages - 1 where number_of_pages>0 and book_id = 10
1 голос
/ 26 февраля 2012

Если вы просто хотите условно обновить некоторые строки и оставить другие нетронутыми, это должно сделать:

update books
set number_of_pages = number_of_pages - 1
where number_of_pages > 0 AND book_id = 10

Если вы хотите обновить все строки (с book_id = 10) на разные значения,Вы можете использовать 2 утверждения с «противоположными» условиями.Предполагая, что 0 является «другим» значением, это будет выглядеть так:

update books
set number_of_pages = number_of_pages - 1
where number_of_pages > 0 AND book_id = 10

update books
set number_of_pages = 0
where number_of_pages <= 0 AND book_id = 10

Или просто используйте CASE, как предлагали другие.

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