【发布时间】:2013-04-03 04:28:51
【问题描述】:
在我的数据库中,我有以下表格和关系:
检查
--has_many--<样品--has_many--<结果
如果一个样本有一个或多个与之相关的结果,则该样本被视为“已分析”。如果对所有样品进行了分析,则检查被认为是“完整的”。我需要找到所有“不完整”的检查;也就是说,所有检查中至少有一个样本未被分析。
我在 mysql 数据库中执行此操作的查询是
SELECT DISTINCT inspections.*
FROM inspections
JOIN samples s ON inspections.id = s.inspection_id
LEFT OUTER JOIN results r ON r.`sample_id` = s.`id`
WHERE r.id IS NULL
我正在尝试将其转换为一个不错的 ActiveRecord find 调用(find_by_sql 除外),但我不确定如何将“嵌套”关联(术语?)的左连接转换为语法。
谁能帮帮我?顺便说一句,这是针对 Rails 2.3 应用程序的。
现在我有
Inspection.all(:select => "distinct inspections.*",
:joins => "join samples on samples.inspection_id = inspections.id " +
"left join results on results.sample_id = samples.id",
:conditions => "results.id is null")
它可以工作,但看起来仍然很粗糙并且太接近整个 sql 语句。还有比这更干净的东西吗?
【问题讨论】:
标签: ruby-on-rails activerecord syntax