2013-03-29 10 views
5

私はRailsの新機能に慣れており、SQL型言語に関してはあまり経験がありません。MySQL 2を使用しているRails 3プロジェクトでWHERE INを使用するには?

私はここで私は私達のデータベースの両方で仕事をしたい一般的なSQL文を持ってMySQL2

を使用してのRails 3プロジェクトに取り組んでいます。 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 
); 

は、私はこの答えは私が必要なもの場合と同じことを、「IN」ステートメントを実行するために(と率直に言って、私もA WHERE内のステートメントが何をするか分からないしようとしています:どうすれば(あるいは私がすることができます)複数の列(PostgreSQLの)上でDISTINCT SELECT)具体的には、私はそれが上記のクエリを行うように、次のActiveRecordの機能を強化しなければならないの?

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

ありがとうございました。

+0

MySQL IN節は、単に包括的​​なORです。 EG:このIN( '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') 

場所の特定のための外観上記の例で特定のフィールドの値を指定すると、クエリは、org_idに1,2または3が含まれるmY_recordsテーブル内のレジスタを検索します。

チェックこのアウト:http://guides.rubyonrails.org/active_record_querying.html

更新:私は理解して、Harish Shettyがポイントを持っています。

関連する問題