いつもお世話になっています。
RailsのActiveRecordについて質問です。
以下のクエリをActiveRecordを使って記述する場合どのように記述すれば良いのでしょうか?
sql
1SELECT 2* 3FROM 4A_Table 5LEFT OUTER JOIN 6(SELECT * FROM B_TABLE WHERE id = 'xxxxx') B_Table 7ON A_Table.id = B_Table.id
やってほしいことだけを記載した丸投げの質問で申し訳ないのですが、かれこれ数時間ハマっています。
ActiveRecordを使うのは今回初めてで、SQLは書けるのですが、ActiveRecordの記述が理解できておらず四苦八苦しています。
みなさまお忙しいところ申し訳ないのですが、ご回答よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
Railsでは基本的に紐付けをa_tables.b_table_id = b_tables.id
で行っており、それを元に結合します。今回の場合はそれに当てはまらないため、joins
の引数にSQLを直接書いていく必要があるかと思います。
提示されているSQLを発行するようなサンプルを書いてみました。
期待通りかどうかはわかりませんが、参考にしてください。
rb
1ATable.joins("LEFT OUTER JOIN (#{BTable.where(id: ***).to_sql}) b_tables ON a_tables.id = b_tables.id").select('*') 2# SELECT * FROM "a_tables" LEFT OUTER JOIN (SELECT "b_tables".* FROM "b_tables" WHERE "b_tables"."id" ***) b_tables ON a_tables.id = b_tables.id
投稿2020/01/29 04:27
編集2020/01/29 04:34総合スコア2340
0
質問のSQLはかなり編集して キモ が変わっていませんか?
意味を理解しかねています。
「A_Table.id = B_Table.id という条件でjoinして」
はわかりますが、求めるのは A_Tableのcolumnだけ SELECT * FROM A_Table
ということは、
SELECT * FROM A_Table WHERE id = 'xxxxx'
と何が異なるのでしょう?
投稿2020/01/28 12:39
総合スコア23284
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/29 08:48
0
ベストアンサー
サブクエリですが、以下のように二つに分けると分かりやすくて良いと思います。
B_id = B_table.find_by(id: "xxxxx").select(:id) A_table.where(id: B_id).all
MySQL
1SELECT 2* 3FROM 4A_Table 5LEFT OUTER JOIN 6(SELECT * FROM B_TABLE WHERE id = 'xxxxx') B_Table 7ON A_Table.id = B_Table.id
投稿2020/01/28 11:54
総合スコア1408
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/28 12:33
2020/01/28 12:47
2020/01/28 14:56
2020/01/28 15:39
2020/01/28 15:53
2020/01/28 22:50
2020/01/29 01:25
2020/01/29 03:49
2020/01/29 04:07
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。