2009-03-21 17 views
38

max(id) kullanarak tablomda bir dizi satır almak istiyorum. NULL döndüğünde - tabloda hiç satır yoksa - 0 dönmek istiyorum. Ve satırlar olduğunda ben max(id) + 1 dönmek istiyorum.SQLite - bir veritabanında satır sayısını alma

Benim satırlarım 0'dan numaralandırılıyor ve otomatik olarak artırılıyor. o zaman bana dönüyor

SELECT CASE WHEN MAX(id) != NULL THEN (MAX(id) + 1) ELSE 0 END FROM words 

Ama 0. Ben yanlış yaptım: Burada

benim ifade doğrudur? İstersen

SELECT CASE WHEN MAX(id) IS NULL THEN 0 ELSE (MAX(id) + 1) END FROM words 

Ama:

cevap

13

sonra Pax gelen yorumları okuduktan sonra, count yerine MAX (id) kullanmak isterseniz, SQL istediğini verecek aşağıdaki

SELECT COALESCE(MAX(id)+1, 0) FROM words 
+1

Zeki ise, ancak yalnızca 0 ile bir otomatik intriniz varsa çalışır. VolkerK'nın cevabı daha basit ve daha etkilidir. – Rich

+2

@Rich. VolkerK'ın cevabı gerçekten daha basittir ve kendimle yaptığım çözümdür, ancak soru OP'nin maksimum (id) kullanmak istediğini ve satırların 0'dan numaralandırıldığını ve otomatik olarak artırıldığını belirtmiştir. –

+1

Doğru ve gerçek. thanks – Rich

8

bkz

SELECT Count(*) FROM tblName
ile gerçek satır sayısını sorgulayabilir, NULL = NULL yanlıştır, genellikle kullanmak zorunda IS NULL Satır sayısı, sadece count(id) kullanmanız gerekir çünkü eğer satırlarınız (0,1,3,5,9) verirse çözümünüz 10 verecektir. 5

Eğer her zaman ids ile 0 N, max (id) +1 , indeks uygulamasına bağlı olarak daha hızlı olabilir (dengeli bir ağacın sağ tarafına doğru ilerlemek daha hızlı olabilir;

Ancak bu, uygulamaya özgüdür ve performansınızı belirli bir DBMS'ye kilitlediği için, buna güvenmeme öneriyoruz.

2
i anlamak eğer aynı sorun var

senin Soruyu doğru olarak sordum, SQLite işleminde her ekleme performansından sonra en son eklenen kimliği bilmek istiyorum. i aşağıdaki ifadeyi çalıştı:

select * from table_name order by id desc limit 1 

id İlk sütun ve tablo_ismi birincil anahtar, sözü edilen açıklamada bana büyük kimliğine sahip kayıt göstermektedir.

Ancak, öncül hiçbir satırda hiçbir satır silinmez, böylece satır sayısı satır sayısına eşittir.

4

Sorunuzu anlayabildiğimden emin değilim, ancak max (id) size satır sayısını vermez. Örneğin, = 13 ile bir satırınız varsa (bir önceki satırları sildiğinizi varsayalım), maksimum (id) = 13, ancak satır sayısı 1 olacaktır. Doğru (ve en hızlı) çözüm kullanmaktır. saymak(). BTW, neden bir yıldız olduğunu merak ediyorsanız, bir ölçütlere dayanarak satırları sayabilirsiniz.

VolkerK en cevabın
1

Uzatma, count başvurmak GİBİ kullanabilirsiniz, kod biraz daha okunabilir hale getirmek için aşağıda örnek:

Bu örneğin, bazı çerçeveler çok daha kolay okunur SELECT COUNT(*) AS c from profile

Ben Exponent'in (React Native) Sqlite entegrasyonunu kullanıyorum ve AS ifadesi olmadan kod oldukça çirkin.

İlgili konular