В соответствии с инструкцией Ingres поддерживает оконные функции и row_number()
, поэтому вы должны иметь возможность:
select coalese(a.rn, b.rn) as rn, a.from_date, b.to_date
from (
select from_date, row_number() over (order by from_date) as rn
from table_a
) a
full join (
select to_date, row_number() over (order by to_date) as rn
from table_b
) b on a.rn = b.rn;
Полное (внешнее) объединение гарантирует, что строки из обоихтаблицы возвращаются, даже если в одной таблице меньше строк, чем в другой.Если вы на 100% уверены, что обе таблицы всегда содержат одинаковое количество строк, вы можете вместо этого использовать внутреннее объединение (удалите ключевое слово full
)
У меня нет Ingres для проверки этого, поэтому, хотявыше приведен стандарт SQL ANSI, могут быть вещи, которые Ingres не поддерживает
проще без полного внешнего объединения и coalesce()
:
select a.rn, a.from_date, b.to_date
from (
select from_date, row_number() over (order by from_date) as rn
from table_a
) a
join (
select to_date, row_number() over (order by to_date) as rn
from table_b
) b on a.rn = b.rn;