Как сделать LEFT JOIN через INNER JOIN?

Задача несколько творческая. В Impala из Oracle драйвер не спускает внешние соединения таблиц (LEFT JOIN). То есть он в импале выполнет запрос обеих частей соединения и джойнить будет уже в оракле, получив результаты обоих запросов по сети. UNION тоже не спускается. Поэтому нужно придумать как сделать левый джон, но через внутренний (например, в случае если в правой таблице не находится нужной строки, то джойнилось бы на какую-нибудь заглушку). Например относительно рабочий вариант:

SELECT *
  FROM table_a
  JOIN (select col_a, col_b from table_b
        union all
        select null col_a, null col_b from dual) t
    ON (<<настоящее_условие_соединения>> AND NOT (col_a is null AND col_b is null))
    OR (NOT <<настоящее_условие_соединения>> AND (col_a is null AND col_b is null)) -- то есть реализация XOR

Но как я сказал, UNION использовать тоже нельзя. Был бы благодарен за любые идеи по обходу ограничения.


Ответы (0 шт):