¿Puedo crear en SQLite
una declaración como esta?Actualización condicional en SQLite
update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
¿Existe una sintaxis de trabajo para esto?
¿Puedo crear en SQLite
una declaración como esta?Actualización condicional en SQLite
update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
¿Existe una sintaxis de trabajo para esto?
Una declaración CASE
debe trabajar con la siguiente sintaxis:
UPDATE
books
SET number_of_page = CASE WHEN number_of_pages > 0 THEN (number_of_pages - 1) ELSE 0 END
WHERE whatever_condition
No es eso igual a esta declaración?
update books set number_of_pages = number_of_pages - 1 where number_of_pages>0
Editar:
según una nueva declaración:
update books set number_of_pages = number_of_pages - 1 where number_of_pages>0 and book_id = 10
Si lo que desea es actualizar condicionalmente algunas filas y dejar los demás intacta, esto debería hacer:
update books
set number_of_pages = number_of_pages - 1
where number_of_pages > 0 AND book_id = 10
Si desea actualizar comió todas las filas (con book_id = 10
) a diferentes valores, puede usar 2 instrucciones con condiciones "opuestas". Suponiendo 0 es el "otro" valor, que se vería así:
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
o simplemente utilizar CASE como han sugerido otros.
@Phoenix Claro que sí, para este ejemplo. –
@Phoenix Extendí un poco la declaración, pero creo que tiene razón. – xralf
@ Es una buena solución. Preferiría aceptar el otro porque hay una semántica más clara (lo que quiero hacer) cuando alguien lee mi código. Pero, ¿tiene su solución alguna ventaja (por ejemplo, en rendimiento)? – xralf