içinde koşullu güncelleştirme SQLite
'da böyle bir deyim oluşturabilir miyim?SQLite
update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
Bunun için çalışan bir sözdizimi var mı?
içinde koşullu güncelleştirme SQLite
'da böyle bir deyim oluşturabilir miyim?SQLite
update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
Bunun için çalışan bir sözdizimi var mı?
A CASE
açıklamada şu sözdizimi ile çalışmalıdır:
UPDATE
books
SET number_of_page = CASE WHEN number_of_pages > 0 THEN (number_of_pages - 1) ELSE 0 END
WHERE whatever_condition
Isnt bu ifadeye eşit olduğunu? Sadece şartlı bazı satırları güncellemek ve bozulmamış diğerlerini bırakmak istiyorsanız
update books set number_of_pages = number_of_pages - 1 where number_of_pages>0 and book_id = 10
Bunu yapmak gerekir:
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
Düzenleme: yeni açıklamaya göre
Eğer upd istiyorsanız tüm satırları (book_id = 10
ile) farklı değerlere yediniz, "karşıt" koşullarla 2 deyimi kullanabilirsiniz.
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
Ya diğerleri önerilen gibi ihtimale kullanın: "öteki" değeri 0 varsayarsak, bu şekilde görünecektir.
@Phoenix Sure bu örnek içindir. –
@Phoenix İfadeyi biraz uzattım ama haklı olduğunu düşünüyorum. – xralf
@ Bu iyi bir çözümdür. Birini diğerini kabul etmeyi tercih ederim çünkü birisi benim kodumu okurken daha net anlambilim (ne yapmak istiyorum) var. Ancak çözümünüzün bir avantajı var mı (örneğin performansta)? – xralf