ruby-on-rails - Rails 左外连接与包含 NULL 的行
问题描述
我需要做一个复杂的外部连接。service interval
如果没有service_note
与之相关的结果,我想在结果中排一排。正如您从查询中看到的,service_interval
属于service_job
通过联合表连接到 service_notes 的查询service_note_jobs
。目前它返回一个空关系,如果没有service_note
连接到那个service_interval
。
def self.distance_and_time_until_next_service(service_interval_ids)
ServiceInterval
.left_joins(vehicle: { service_notes: :service_note_jobs })
.where(
'service_note_jobs.service_job_id = service_intervals.service_job_id AND '\
'service_intervals.vehicle_id = service_notes.vehicle_id'
)
.where(service_intervals: { id: service_interval_ids })
.group('service_intervals.id')
.select(
'service_intervals.id',
"MAX(GREATEST(service_notes.odometer, service_intervals.created_odometer) - vehicles.odometer + service_intervals.distance_interval) AS distance_left_until_next_service",
"MAX(ROUND(EXTRACT(epoch FROM(GREATEST(service_notes.date, service_intervals.created_at) - NOW())) / 86400 + service_intervals.time_interval)) AS time_left_until_next_service"
)
end
解决方案
尝试在您的 left_joins 之后添加:
.where(vehicle: { service_notes: { id: nil } })
或更一般的样本
User.left_joins(:posts).where(posts: { id: nil })
这将为您提供没有帖子的用户。
推荐阅读
- reactjs - 使用 AWS KMS 非对称密钥进行加密
- html - 登陆页面引导 CSS 不会在所有浏览器上加载
- c - C 中的文件读取不能与联合使用结构一起工作
- r - 在 R 中的一张图上绘制多条线
- c++ - 如何不重复 if 语句并允许它以某种方式查找它们?我很新,我确定这是基本的
- javascript - google.maps 在 Django 中未定义
- firebase - 如何使用云功能在 7 天后自动删除 Firebase 存储文件
- elasticsearch - 弹性搜索作为 grafana 数据源
- ruby-on-rails - 链接 FactoryBot 关联
- c++ - 结构内带有模板参数的函数指针