我正在尝试将原始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列)
答案 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不保证任何排序,因此请确保也指定它。 然后,您只需加入窗口函数生成的行号即可。
以上方法可用于任意数量的列。