如何在使用MySQL 2的Rails 3项目中使用WHERE IN?

use*_*506 5 mysql activerecord ruby-on-rails where-in

我对Rails很陌生,对SQL类型语言有很少的经验.

我正在使用MySQL2开发Rails 3项目

我这里有一个通用的SQL语句,我想在我们的数据库中同时工作.有没有办法通过ActiveRecord功能来做到这一点?

SELECT * FROM MyRecords 
WHERE  (f1, f2, f3, f4) IN (
    SELECT f1, f2, f3, f4
    FROM   MyRecords
    GROUP  BY f1, f2, f3, f4
    HAVING count(*) = 1 
);
Run Code Online (Sandbox Code Playgroud)

换句话说,我想执行"其中"语句(并坦率地说,我甚至不知道凡在声明中所做的,只是这个答案做什么我需要:我如何(或者我可以)SELECT DISTINCT on multiple columns(postgresql)?)更具体地说,我必须扩充以下ActiveRecord函数,以便它执行上述查询:

  def MyRecordFunction
    MyRecords.where('org_id=?', self.org_id).order('f4')
  end
Run Code Online (Sandbox Code Playgroud)

谢谢.

pab*_*rti 27

我有点困惑,但我认为这就是你要找的东西:

MyRecord.where(:org_id => [1, 2, 3]).order('f4')
Run Code Online (Sandbox Code Playgroud)

的其中上述查找某些字段的特定值,在该示例中陈述,该查询将寻找寄存器mY_records表,其中包含org_id 1,2或3.

看看这个:http://guides.rubyonrails.org/active_record_querying.html

更新:我明白,Harish Shetty有重点.


Har*_*tty 0

尝试这个:

MyRecord.joins("JOIN
  (
    SELECT f1, f2, f3, f4
    FROM   my_records
    GROUP  BY f1, f2, f3, f4
    HAVING count(*) = 1 
  ) a ON a.f1 = my_records.f1 AND
         a.f2 = my_records.f2 AND
         a.f3 = my_records.f3 AND
         a.f4 = my_records.f4")
Run Code Online (Sandbox Code Playgroud)