5

私は 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 
);

言い換えれば、私は「WHERE IN」ステートメントを実行しようとしています (率直に言って、私は WHERE IN ステートメントが何をするのかさえ知りません。この答えが私が必要としているものを実行するということだけです。 ) 複数の列 (postgresql) で SELECT DISTINCT? ) より具体的には、上記のクエリを実行できるように、次の ActiveRecord 関数を拡張する必要があります。

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

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

4

2 に答える 2

27

少し混乱していますが、これがあなたが探しているものだと思います:

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

where 内のinステートメントは、特定のフィールドの特定の値を探します。上記の例では、クエリは、org_id に 1、2、または 3 が含まれる mY_records テーブルで register を探します。

これをチェックしてください:http://guides.rubyonrails.org/active_record_querying.html

更新: わかりました。Harish Shetty には要点があります。

于 2013-03-29T17:14:58.913 に答える
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")
于 2013-03-29T17:14:33.780 に答える