2017-07-27 78 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