Ошибка здесь: order by b.buyer_entity_id) tab2)
.Вам нужно предложение on
, чтобы указать условие соединения между tab1 и tab2.order by b.buyer_entity) tab1 on <join condition)
Как только это будет исправлено.Вам нужно будет добавить full
к следующей строке, чтобы outer join (select b.buyer_entity_id, count(distinct(a.row_id)) as vers
стало full outer join (select b.buyer_entity_id, count(distinct(a.row_id)) as vers
.
Это охватывает синтаксические проблемы, но не семантические проблемы.
Соединения по парам Таблица 1 соединяется с таблицей 2 при некоторых условиях, после чего результаты переходят в левую часть следующего соединения.Что вы хотите, чтобы произошло, если tab1 и tab3 совпадают, а tab2 нет?Я предположил бы создать строку с данными tab1 и tab3 и нулями tab2.Что-то вроде:
select *
from (select b.buyer_entity_id, count(distinct(a.row_id)) as imps
from imps_table a, line_table b
where b.line_item_id=a.buyer_line_id
and a.entity_id=3
group by b.buyer_entity_id) tab1
full outer join (select b.buyer_entity_id, count(distinct(a.row_id)) as clicks
from clicks_table a, line_table b
where a.buyer_line_id=b.line_item_id
and a.entity_id=3
group by b.buyer_entity_id) tab2
on tab1.buyer_entity_id = tab2.buyer_entity_id
full outer join (select b.buyer_entity_id, count(distinct(a.row_id)) as vers
from vers_table a, line_table b
where b.line_item_id=a.buyer_line_id
and a.entity_id=3
group by b.buyer_entity_id) tab3
on tab3.buyer_entity_id in (tab1.buyer_entity_id, tab2.buyer_entity_id)
order by coalesce(tab1.buyer_entity_id
, tab2.buyer_entity_id
, tab3.buyer_entity_id);
Также, пожалуйста, потеряйте order by
в подзапросах.Они ничего не делают для вас, так как орден не гарантированно выживет при соединениях.