繁体   English   中英

为什么Arel在构建SQL时会丢弃“左外部联接”?

[英]Why is Arel dropping the 'left outer join' when it builds SQL?

我正在尝试在Arel中建立以下查询:

select a.* from (first nested query) as a
left outer join (second nested query) as b
on a.id = b.id
where b.id is null;

这是我的最佳尝试:

query = a.
  project(a[Arel.star]).
  from(a_nested_sql).
  join(b_nested_sql, Arel::Nodes::OuterJoin).
  on(a[:id].eq(b[:id])).
  where(b[:id].eq(nil))

但是它会不断丢弃“左外部联接”,从而产生无效的SQL:

select a.* from (first nested query) as a
(second nested query) as b
on a.id = b.id
where b.id is null;

我究竟做错了什么?

经过大量的实验,这达到了目的:

query = a_table.
  project(a_table[Arel.star]).
  from(a_nested_sql).
  join(
    b_table.join(b_nested_sql).join_sources,
    Arel::Nodes::OuterJoin
  ).
  on(a_table[:id].eq(b_table[:id])).
  where(b_table[:id].eq(nil))

不太确定为什么,因为我不太了解join_sources的作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM