ingres 10s sql номер строки
У меня есть две простые таблицы с одним столбцом, как это:
Таблица первая:
from_date
01.01.18
15.01.18
23.01.18
01.02.18
Таблица вторая:
to_date
15.01.18
23.01.18
01.02.18
05.02.18
Все, что я хочу сделать, это присоединиться к ним на a.row_number = b.row_number
Я не могу найти способ в Ingres SQL сделать это. Лучшая идея, которую я имею, состоит в том, чтобы добавить столбец номера строки к каждой таблице и присоединиться к ней. Я сталкивался с функцией CREATE SEQUENCE, но не могу найти четких инструкций по ее применению.
2 ответа
Согласно инструкции 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;
С temp1 как (
выберите row_number() over (order by from_date) в качестве строки из таблицы A
),
temp2 as (
выберите row_number() over (order by from_date) в качестве строки из tableB
)
выберите.б.
от temp1 a
присоединиться к temp2 b на a.row=b.row