我可以在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