2016-05-14 85 views
2

這個讓我很生氣 - 我必須在這裏丟失一些非常簡單的東西,但一直在谷歌搜索2小時,並沒有得到任何好處。我使用Postgresql 9.5.1構建了一個Rails應用程序,該應用程序處理理髮師的約會。其中一列是可用的 - 如果約會可用於預訂 - 這是一個布爾值。我需要獲取給定約會ID的下5條記錄。查詢不返回布爾列設置爲FALSE的記錄?

select * 
from appointments 
where id > 13 
and barber_id = 1 
limit 5 

這將返回5條記錄,但可用字段都是真的,即使記錄14-18隨着可用= FALSE屬性的存在。

Screenshot from Postico of the table

如果我使用的查詢

select * from appointments where id > 13 and barber_id = 1 and (available = false) limit 5 

然後可用= FALSE只返回的記錄,但我想匹配,無論真假的所有記錄。

我也曾嘗試

select * from appointments where id > 13 and barber_id = 1 and (available = false or available = true) limit 5 

但是,這也只能返回可用= TRUE記錄。

把我的頭髮弄出來 - 我錯過了什麼?默認還是什麼?

+0

只是'available = false'。還有另一種檢查布爾值的方法:'length(available :: text)<5';) – Abelisto

回答

2

如果你的ID是不是有序,您可能希望對它們進行排序,並返回

select * from appointments where id > 13 and barber_id = 1 and 
      (available = false or available = true) order by id asc limit 5 

而且你的布爾東西可以徹底卸除如果它是一個NOT NULL列,因爲要檢查兩個真實與虛假:)

+1

就是這樣,謝謝!數據庫全都混亂起來,並認爲它只會按順序查找ID。 – Tebbers

+0

@Tebbers沒問題。不用謝。 –