2

activerecordでは、できればリテラルSQLを使用せずに、大まかにこれを実行しようとしています。

Thing.where(:id => Link.select(:col1).where(subquery1), :id => Link.select(:col2).where(subquery2))

サブクエリ間にANDを付けるために必要ですが、代わりに最後のサブクエリが前のサブクエリをオーバーライドします。

注:各サブクエリのリンクテーブルから別の列を選択しています

私はすでにこれを試しました:

t = Thing.where(:id => Link.where(subquery1))
t.where(:id => Link.where(subquery2))

また、サブクエリの性質上、ANDを単一のサブクエリに入れることができないことに注意してください。

SQLに頼らずにActiveRecordでこれを行う方法はありますか?

Rails3とPostgreSQLを使用しています

ありがとう!

4

1 に答える 1

1

おそらく、条件を2つチェーンしてから、それらを組み合わせる方がよいでしょう。

Thing.where(:id => Link.select(:col1).where(subquery1)).where(:id => Link.select(:col2).where(subquery2))

これにより、2つのクエリのAND間に追加されます。IN

于 2012-12-24T03:53:41.960 に答える