Ruby on rails 返回列的所有值均为false的Postgresql查询
我有一张工作表和投标表。每项工作都有许多出价。有一个布尔值的bid列“is_selected”。对于一个作业,只能选择一个出价=true 我的问题是,我想返回所有出价均为_selected=false的作业数 那么比如说,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
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(整数)
- 是否选择了_(布尔值)
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查询?如何将这些数据存储在数据库中?如果您想要一个好的答案,您需要提供更好的数据示例,因为它存储在数据库中。我无法从中看出您的模式是什么样子。这也是一个很好的选择。我更新了表格信息