2017-07-27 86 views
0

我正在尝试组合来自3个模型的数据的ActiveRecord查询。有MachineGroups有很多Machines,而这又可以有许多Outputs。我希望有一个查询选择全部来自给定机器组的机器的输出来自给定时间范围内的输出,这意味着如果机器在给定时间范围内具有零输出 - 应包含在列表中,但不包含输出数据。在AR查询中嵌套的SQL SELECT

SQL代码:

SELECT * FROM machines LEFT OUTER JOIN 
(SELECT * FROM outputs 
WHERE outputs.created_at >= "2017-07-25 05:00:00" 
AND outputs.created_at < "2017-07-26 17:00:00") AS o 
ON machines.id = o.machine_id 
WHERE machines.machine_group_id = 1; 

回答

1

应该像

SELECT m.* 
FROM machines m 
LEFT OUTER JOIN outputs o ON m.id = o.machine_id 
    AND o.created_at >= '2017-07-25 05:00:00' 
    AND o.created_at < '2017-07-26 17:00:00' 
WHERE m.machine_group_id = 1 ; 
+0

谢谢,这个重构的作品,并消除子查询的SELECT语句。 – adass