2013-03-29 49 views
5

我對Rails很陌生,對SQL類型的語言有一定的經驗。如何在使用MySQL 2的Rails 3項目中使用WHERE IN?

我正在使用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 
); 

換句話說,我想執行「其中」語句(並坦率地說,我甚至不知道凡在聲明中所做的,只是這個答案做什麼,我需要: ?如何(或可我)選擇上多列(PostgreSQL的)是不同的)具體而言,我必須加強以下ActiveRecord的功能,使得它上面的查詢:

def MyRecordFunction 
    MyRecords.where('org_id=?', self.org_id).order('f4') 
    end 

謝謝。

+0

MySQL IN子句只是一個包含性OR。 EG:在這裏('1','2','3')與做相同。 WHERE this ='1'OR this ='2'OR this ='3'http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in – fyrye

回答

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") 
27

我有點困惑,但我認爲這是你在找什麼:在聲明

MyRecord.where(:org_id => [1, 2, 3]).order('f4') 

內哪裏尋找特定在上面的示例中,查詢將查找mY_records表中的寄存器,其中org_id包含1,2或3.

檢查這出:http://guides.rubyonrails.org/active_record_querying.html

更新:我明白,哈里什謝蒂有重點。