2015-05-25 3 views
0

Я пытаюсь построить следующий запрос в Arel:Почему Arel удаляет «левое внешнее соединение», когда он строит SQL?

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; 

Что я делаю неправильно?

ответ

0

После много экспериментировали, это сделал трюк:

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.