在我的数据库中,我有以下表格和关系:
检查
--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
我正在尝试将其转换为一个不错的 ActiveRecordfind
调用(除了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 语句。还有比这更干净的东西吗?