2011-06-08 41 views
1

這怎麼會發生?SQLite SELECT col WHERE col = 0;更改結果

sqlite> select read, text from message; 
1|No just got off the train 
1|yadayada 
1|Beautiful 
1|<3 
1|DONE <3 
0|Hey 

sqlite> select read, text from message where read=0; 
0| 
0|Ooo very cool 
0|Donors choose? 
0|No prize for the computer reading program/model/master class 
0|Hey 

我截斷了每個SQL查詢中很長的結果。這些是每個人的最後幾項結果。據我所知,只有一個記錄的列read = 0,但是當我添加where子句,突然所有記錄返回該值。爲了進一步混淆事物,結果是不同的,或者至少是以不同的順序,輸出對於我來說太長了。

非常感謝您的時間和幫助。

+1

你可以匹配選擇計數(1)從消息的結果;從讀取= 0的消息中選擇count(1);從讀取= 1的消息中選擇count(1)。 – Dheer 2011-06-08 03:38:42

+0

嘿,我覺得沒有想到這一點很愚蠢。當然......他們加起來,所以「嘿」信息一定是巧合。這讓我弄清楚爲什麼那麼多的消息被報告爲未讀,而應該只有一個。謝謝你。 – 2011-06-08 03:41:38

回答

1

您在任一SQL語句中都沒有提供「order by」子句,因此結果將以默認順序返回給您 - 這可能是由其主鍵(如果存在)或順序被插入表中。

從您的第一個查詢中提供的截斷很可能是該表中的最後6條記錄。從第二個查詢中提供的截斷很可能是該表中WHERE讀取= 0的最後6條記錄。

總之,僅僅因爲您在第一個查詢中提供的6行中只看到1條記錄,其中讀取= 0並不意味着只有1個。它只是意味着最後6行中只有1個。如果您想先查看所有「read = 1」行,然後再查看所有「read = 0」行,則嘗試添加「order by」子句。

sqlite> select read, text from message order by read, text; 

sqlite> select read, text from message where read=0 order by text; 
相關問題