Sql 如何从两个嵌套的记录中选择零关联的记录?

Sql 如何从两个嵌套的记录中选择零关联的记录?,sql,ruby-on-rails,Sql,Ruby On Rails,几天前,我问了以下问题: 我未能将解决我先前问题的答案与类似情况相适应: 类报告

几天前,我问了以下问题:

我未能将解决我先前问题的答案与类似情况相适应:

类报告
类停止
课程旅程
以下是相应的迁移:

class CreateReports
class CreateStops
class CreateJourneys
以下是更直观的描述:

如何选择
行程
站点
没有任何关联的
报告
出发
到达

我所寻找的将相当于:

travely.all.选择do |旅程|
旅程,停止,全部?停下来|
stop.exchange\u reports.count+stop.arrival\u reports.count==0
结束
结束
编辑

尝试塞巴斯蒂安·帕尔马提出的解决方案:

旅程
.左_连接(:停止)
.joins('LEFT OUTER JOIN reports ON stops.id IN(reports.disease\u id,reports.arrival\u id)'
.where(报告:{出发id:nil,到达id:nil})
我得到以下sql查询:

从“行程”中选择“行程”。*
中的stops.id上的左外部联接报告(reports.example\u id,reports.arrival\u id)
左侧外部连接“站”上的“站”。“旅程id”=“旅程”。“id”
其中“报告”。“出发id”为空,“报告”。“到达id”为空
限额1美元[[“限额”,11]]
出现此错误时:

Traceback (most recent call last):
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "stops")
LINE 1: ...eys".* FROM "journeys" LEFT OUTER JOIN reports ON stops.id I...
                                                             ^

有以下车型侧面的变化

class Journey < ApplicationRecord
  has_many :stops
  has_many :departure_reports, through: :stops
  has_many :arrival_reports, through: :stops
end

上面的优点是,即使调用另一个查询来传递内部属性,也只触发一个查询。

我做了类似的测试,但我更喜欢纯SQLsolution@JulienDargelos上面的查询是activerecord查询,它在后端生成SQL。你试过了吗?哦,是的,你是对的,我认为“上面”的意思是“上面的答案”(它刚才在你的上面)@JulienDargelos我想你知道“纯SQL解决方案”和“activerecord查询”之间的确切区别。是的,我同意,这就是为什么当只有一个SQL查询足够时,我试图避免多个SQL查询(以及为什么我错误地拒绝了你的答案)。如果你所说的“代码复杂性”是指“认知复杂性”,那么你的解决方案现在肯定是最好的,因为它非常有意义。
Journey.where.not(id: Journey.joins(:departure_reports, :arrival_reports).distinct.ids)