SQLite

2012-02-26 27 views
7

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ı?

cevap

13

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 
4

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 
+0

@Phoenix Sure bu örnek içindir. –

+0

@Phoenix İfadeyi biraz uzattım ama haklı olduğunu düşünüyorum. – xralf

+0

@ 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

1

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.