通过索引联接两个表?

时间:2018-10-30 14:45:16

标签: sql postgresql

我正在尝试将原始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 :(得分:0)

这应该做:

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不保证任何排序,因此请确保也指定它。 然后,您只需加入窗口函数生成的行号即可。

以上方法可用于任意数量的列。