【发布时间】:2012-08-19 00:09:40
【问题描述】:
假设我有两个表 TableA 和 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 中的左外联接?
【问题讨论】:
-
我也在做这个,如何进行全外连接?
标签: ruby activerecord arel