67570


親テーブルで別々の条件でフィルタした子テーブルの共通レコードを取りたいんですが  
Active Record でサブクエリはどう書けばいいんでしょうか

具体的にはこんな感じのクエリを投げたいです

[code]

    WITH tmp1 AS (
      SELECT children.* FROM parents JOIN children WHERE ...
    ),
    tmp2 AS (
      SELECT children.* FROM parents JOIN children WHERE ...
    ),
    SELECT * FROM tmp1 JOIN tmp2 ON ...
    
[/code]

* * *

ちなみに ActiveRecord Relation から実行せずにクエリだけ取り出したりってできないででしょうか？  
全て active record でかかなくても以下のように SQL インジェクション が起こりそうなクエリだけ  
active record で生成してもいいかなと思うんですが

[code]

    sql = <<EOS
    WITH tmp1 AS (
      #{sub_query1}
    ),
    tmp2 AS (
      #{sub_query2}
    ),
    SELECT * FROM tmp1 JOIN tmp2 ON ...
    EOS
    ActiveRecord::Base.connection.select_all(sql)
    
[/code]


CC BY-SA 4.0
2020-06-12T04:37:56.347
67569
2020-06-12T05:12:57.887
question
ruby-on-rails rails-activerecord
active record でサブクエリを使う方法


`ActiveRecord::Relation#to_sql` が、求めているメソッドかな、と思っています。

> ちなみに ActiveRecord Relation から実行せずにクエリだけ取り出したりってできないででしょうか？

が実現できます。


CC BY-SA 4.0
2020-06-12T05:12:57.887
67570
2020-06-12T05:12:57.887
754
67569
answer