Управление порядком соединения при объединении левого соединения и внутреннего соединения в Impala SQL
С такими данными
create table table_a as select 1 as id1;
insert into table_a values (2),(3);
create table table_b as select 1 as id1, 'a' as id2;
insert into table_b values (1,'b');
create table table_c as select 'a' as id2;
У меня есть следующий вид объединения в Impala sql:
select *
from table_a as a
left join table_b as b
on b.id1 = a.id1
left join table_c as c
on c.id2 = b.id2
дающий этот результат
"id1","id1","id2","id2"
1,1,b,
1,1,a,a
2,,,
3,,,
Я бы хотел, чтобы второе соединение было внутренним, а не левым:
select *
from table_a as a
left join table_b as b
on b.id1 = a.id1
join table_c as c /* <- How to process this join first without using inner queries? */
on c.id2 = b.id2
и получить этот результат:
"id1","id1","id2","id2"
1,1,a,a
2,,,
3,,,
Таким образом, я хотел бы, чтобы внутреннее соединение table_b
а также table_c
иметь место сначала и только после того, как сделать левое соединение между table_a
а также (table_b
внутренний присоединился к table_b
).
Можно ли таким способом определить порядок соединения без использования внутренних запросов?
1 ответ
С помощью @jarlh я реализовал обработку объединений слева направо, а затем обнаружил, что можно использовать ПРАВЫЕ объединения:
select *
from table_c as c
join table_b as b
on b.id2 = c.id2
right join table_a as a
on a.id1 = b.id1;
чтобы получить желаемый результат:
"id2","id1","id2","id1"
a,1,a,1
,,,2
,,,3