Объединение двух таблиц по индексу? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь объединить исходную таблицу Postgres с другой таблицей с таким же количеством строк (я получил эту таблицу, отправляя запросы API из исходной таблицы).

Порядок строк в таблицах 1, 2, 3 должен быть одинаковым!

Можно ли как-нибудь объединить эти две таблицы, используя индекс? (Порядок этих строк практически одинаков).

Две таблицы не имеют соответствующих значений.

Например,

Таблица 1 (50 000 строк) (столбцы a, b, c)

Таблица 2 (50 000 строк) (столбцы d, e, f)

Желаемый результат: Таблица 3 (50 000 строк) (столбцы a, b, c, d, e, f)

1 Ответ

0 голосов
/ 30 октября 2018

Это должно сделать:

with sample_data as (
        select 1 as id, 'aa'::text as val
        union all
        select 2 as id, 'bb'::text as val
        union all
        select 3 as id, 'cc'::text as val
),
sample_data2 as (
        select 4 as id, 'dd'::text as val
        union all
        select 5 as id, 'ee'::text as val
        union all
        select 6 as id, 'ff'::text as val
)
, sd_rn as (
        select id
                , val
                , row_number() over (order by id) rn
        from sample_data
)
, sd2_rn as (
        select id
                , val
                , row_number() over (order by id) rn
        from sample_data2
)
select *
from sd_rn s1
join sd2_rn s2 on s1.rn = s2.rn

Первые два CTE предназначены только для генерации двух образцов таблиц.

Я не уверен, что вы подразумеваете под индексом, но вам понадобится какой-то уникальный идентификатор для каждой строки, чтобы вы могли использовать row_number (), как показано выше. Кроме того, sql не гарантирует какой-либо порядок, поэтому убедитесь, что вы также указали его. Затем вы просто присоединяетесь к номеру строки, сгенерированному оконной функцией.

Приведенный выше метод будет работать с любым количеством столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...