我可以在SQLite
中創建類似的語句嗎?SQLite中的條件更新
update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
是否有此工作的語法?
我可以在SQLite
中創建類似的語句嗎?SQLite中的條件更新
update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
是否有此工作的語法?
一個CASE
語句應使用以下語法工作:
UPDATE
books
SET number_of_page = CASE WHEN number_of_pages > 0 THEN (number_of_pages - 1) ELSE 0 END
WHERE whatever_condition
心不是說等於這個說法?
update books set number_of_pages = number_of_pages - 1 where number_of_pages>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 = 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。
@Phoenix當然,就這個例子而言。 – 2012-02-26 14:06:01
@Phoenix我稍微擴展了這個陳述,但認爲你是對的。 – xralf 2012-02-26 14:08:41
@這是一個很好的解決方案。我寧願接受另一個,因爲當有人讀取我的代碼時,會有更清晰的語義(我想要做什麼)。但是你的解決方案有哪些優勢(例如性能)? – xralf 2012-02-26 14:13:54