【问题标题】:Query not returning records with a boolean column set to FALSE?查询不返回布尔列设置为 FALSE 的记录?
【发布时间】:2016-05-14 18:05:40
【问题描述】:

这个让我发疯 - 我一定错过了一些非常简单的东西,但已经谷歌搜索了 2 个小时,却一无所获。我正在使用 Postgresql 9.5.1 构建一个 Rails 应用程序来处理理发师的约会。其中一列可用 - 如果约会可以预订 - 它是一个布尔值。我需要获取给定约会 ID 的下 5 条记录。

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

这将返回 5 条记录,但可用字段全部为真,即使记录 14-18 存在且属性为 available = FALSE。

如果我使用查询

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

然后它只返回可用 = FALSE 的记录,但我想要所有匹配的记录,无论是 TRUE 还是 FALSE。

我也试过

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

但这也只返回 available = TRUE 记录。

在这里扯我的头发 - 我错过了什么?!是默认还是什么?

【问题讨论】:

  • 差不多available = false。还有另一种检查布尔值的方法:length(available::text) < 5 ;)

标签: sql ruby-on-rails postgresql ruby-on-rails-4


【解决方案1】:

如果您的 id 未按排序顺序,您可能需要对其进行排序并返回

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

如果你的布尔值不是空列,它可以完全删除,因为你正在检查真假:)

【讨论】:

  • 就是这样,谢谢!数据库完全混乱,并假设它只会按顺序查找 ID。
猜你喜欢
  • 2019-06-10
  • 2020-06-23
  • 2014-08-12
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多