TableA
2つのテーブルがありTableB
、結合テーブルを介して多対多の関係にあると仮定しますTableABJoin
。ARel 3を使用して、との完全結合を実行するクエリを生成したいと思いTableA
ますTableB
。
私が生成したいクエリは、これらの線に沿ったものでなければなりません:
SELECT a.id, b.code
FROM TableA as a, TableB as b
これにより、テーブルAとBが完全に結合されます。
明示的なSQL文字列を記述せずに取得できた最も近い方法は、外部結合をハックすることです。
part_a = TableA.arel_table
part_b = TableB.arel_table
query = part_a.join(part_b, Arel::Nodes::OuterJoin).on('1=1').project(part_a[:id], part_b[:code]).to_sql
これにより、次のSQLが生成されます。
SELECT "TableA"."id", "TableB"."code" FROM "TableA" LEFT OUTER JOIN "TableB" ON 1=1
コンポーネントを除外する.on
と、末尾にNULLが表示されます。
SELECT "TableA"."id", "TableB"."code" FROM "TableA" LEFT OUTER JOIN "TableB" NULL
ARelの左外部結合をハッキングせずに、適切な完全結合を生成する、または少なくとも同じ結果を生成するためのより合理的な方法はありますか?