Conditional update in SQLite

后端 未结 3 1306
终归单人心
终归单人心 2020-12-06 18:31

Can I create in SQLite a statement like this?

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


        
相关标签:
3条回答
  • 2020-12-06 18:59

    If you just want to conditionally update some rows and leave others intact, this should do:

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

    If you want to update all rows (with book_id = 10) to different values, you can use 2 statements with "opposite" conditions. Assuming 0 is the "other" value, that would look like this:

    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
    

    Or just use CASE as others have suggested.

    0 讨论(0)
  • 2020-12-06 19:03

    Isnt that equal to this statement ?

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

    Edit:

    according to new statement :

    update books set number_of_pages = number_of_pages - 1 where number_of_pages>0 and book_id = 10
    
    0 讨论(0)
  • 2020-12-06 19:18

    A CASE statement should work with the following syntax:

    UPDATE
      books
    SET number_of_page = CASE WHEN number_of_pages > 0 THEN (number_of_pages - 1) ELSE 0 END
    WHERE whatever_condition
    
    0 讨论(0)
提交回复
热议问题