Posso creare in SQLite
una dichiarazione come questa?Aggiornamento condizionale in SQLite
update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
Esiste una sintassi di lavoro per questo?
Posso creare in SQLite
una dichiarazione come questa?Aggiornamento condizionale in SQLite
update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
Esiste una sintassi di lavoro per questo?
Una dichiarazione CASE
dovrebbe funzionare con la seguente sintassi:
UPDATE
books
SET number_of_page = CASE WHEN number_of_pages > 0 THEN (number_of_pages - 1) ELSE 0 END
WHERE whatever_condition
Isnt che uguale a questa affermazione?
update books set number_of_pages = number_of_pages - 1 where number_of_pages>0
Edit:
secondo una nuova dichiarazione:
update books set number_of_pages = number_of_pages - 1 where number_of_pages>0 and book_id = 10
Se si desidera semplicemente aggiornare condizionale alcune righe e lasciare intatti gli altri, questo dovrebbe fare:
update books
set number_of_pages = number_of_pages - 1
where number_of_pages > 0 AND book_id = 10
Se si desidera aggiornare mangiato tutte le righe (con book_id = 10
) su valori diversi, è possibile utilizzare 2 istruzioni con condizioni "opposte". Supponendo 0 è l ' "altro" valore, che sarebbe simile a questa:
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 semplicemente usare CASE come altri hanno suggerito.
@Phoenix Sure è, per questo esempio. –
@Phoenix Ho esteso la frase un po ', ma penso che tu abbia ragione. – xralf
@ È una buona soluzione. Preferirei accettare l'altro perché c'è una semantica più chiara (quello che voglio fare) quando qualcuno legge il mio codice. Ma la tua soluzione ha qualche vantaggio (ad esempio in termini di prestazioni)? – xralf