Ruby on rails 返回列的所有值均为false的Postgresql查询

Ruby on rails 返回列的所有值均为false的Postgresql查询,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我有一张工作表和投标表。每项工作都有许多出价。有一个布尔值的bid列“is_selected”。对于一个作业,只能选择一个出价=true 我的问题是,我想返回所有出价均为_selected=false的作业数 那么比如说, Job 1 has bids a=true, b=false, c=false, d=false Job 2 has bids a=false, b=false, c=false Job 3 has bids a=false, b=false Job 4 has no bi

我有一张工作表和投标表。每项工作都有许多出价。有一个布尔值的bid列“is_selected”。对于一个作业,只能选择一个出价=true

我的问题是,我想返回所有出价均为_selected=false的作业数

那么比如说,

Job 1 has bids a=true, b=false, c=false, d=false 
Job 2 has bids a=false, b=false, c=false
Job 3 has bids a=false, b=false
Job 4 has no bids
此查询的结果应返回一个包含3个作业的查询(只有作业1选择了投标人;因此应返回作业2、3、4)

如何在postgresql或ActiveRecord/Rails中实现这一点


更新数据结构:

3张桌子

事件(有多个作业)

作业(有多个投标,属于活动)

  • 事件id(整数)
投标(属于工作)

  • 作业id(整数)

  • 是否选择了_(布尔值)


这里有一种在ruby中实现的方法——效率不如在数据库中实现

all_jobs = Job.includes(:bids)
logger.debug "ALL JOBS: #{all_jobs.length}"

jobs = all_jobs.reject { |job| job.bids.detect(&:is_selected) }
logger.debug "UNSELECTED JOBS #{jobs.length}"

这应该作为纯SQL解决方案工作:

select count(1) 
from jobs 
where id not in (select distinct job_id from bids where is_selected=true)

假设您只想知道没有出价的作业总数。如果您想要作业的详细信息,可以替换select子句的内容。

您将如何在数据库级别执行sql查询?如何将这些数据存储在数据库中?如果您想要一个好的答案,您需要提供更好的数据示例,因为它存储在数据库中。我无法从中看出您的模式是什么样子。这也是一个很好的选择。我更新了表格信息