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

Другие вопросы по тегам