0

我有兩個型號SchoolExpense,其中學校有很多費用,Expense條件從表中獲取記錄有一個名爲屬性cost基於在關聯表

我想只獲取與他們的費用的學校大於一定值花費更大,比方說1000,我想這個查詢

School.includes(:expenses).where("lower(schools.name) LIKE '%a%' and expenses.cost >= 1000").select('*').from('schools, expenses') 

與此查詢的問題是它返回重複的值,如果一所學校有多個支出成本大於1000,我要的是唯一的獨特基於條件的學校。

請幫忙!

回答

1
School. 
joins(:expenses). 
where("lower(schools.name) LIKE ?", "%a%"). # part of the code you shared 
where("expenses.cost > ?", 1_000). 
group("schools.id") 
+0

如果每個學校都沒有費用該怎麼辦? – RSB 2015-03-14 08:29:00

+1

由於這是一個內部連接,這些學校將被忽略。在我們的情況下,這是絕對沒有問題的,因爲我們只希望學校的費用高於一定的價值。如果你仍然希望在查詢過濾之前包含這些學校(無論出於何種原因),可以使用如下所示的外部連接:'School.join(「LEFT OUTER JOIN費用ON費用.school_id= schools.id」)。 where(conditions).group(「schools.id」)' – Humza 2015-03-14 08:54:32

+0

感謝您的幫助! – RSB 2015-03-14 09:03:01