activerecord相当于SQL'减'

时间:2010-08-07 01:51:26

标签: sql ruby-on-rails activerecord

从另一个中减去查询结果的rails方法是什么?特定于数据库的SQL示例如下:

SELECT Date FROM Store_Information
MINUS
SELECT Date FROM Internet_Sales 

2 个答案:

答案 0 :(得分:4)

我会把它归入混合 - 不是解决方案,但可能有助于取得进展:

我能想到的最好是使用NOT IN:

StoreInformation.where('date NOT IN (?)', InternetSale.all)

那是Rails 3 - Rails 2将是:

StoreInformation.all(:conditions => ['date NOT IN(?)', InternetSale.all])

但这两个都将首先从internet_sales中选择一切;你真正想要的是一个嵌套查询来完成数据库引擎中的所有事情。为此,我认为你必须打破find_by_sql并给出一个嵌套查询。

显然这假设您正在使用MySQL! HTH。

答案 1 :(得分:-1)

迟到的答案,但我认为你的意思是:

activities = Activity.all

searches = activites.where(key: 'search')

(activites - searches).each do |anything_but_search|
   p anything_but_search
end

你可以减去两个ActiveRecordsRelation并得到MINUS结果,就像SQL一样。

我正在使用Rails 4.2,因此除了该版本之外的任何东西都可以解决问题。