如何在没有匹配结果的情况下合并两个结果集?

时间:2017-07-24 22:27:38

标签: merge db2 cross-product

我有一个查询,它返回一个项目列表和空白序列号字段,如下所示:

Item  S/N
1        
1
1
2
3
3
3
3
. . .

复制是指,因为项目的行数对应于购买的项目数。我还有一个表格,其中包含已收到序列号的项目:

Item  S/N
2     416
3     72
3     319
. . .

构建第一个列表的查询不会引用带有序列号的表。 现在,我想用表中的信息修改查询结果 这样表格中的序列号就会被添加到匹配的项目中。但是,如果没有足够的序列号,我希望保留空白序列号(请注意,表中的项目将永远不会比查询更多)。新结果如下所示:

Item  S/N
1
1
1
2     416
3     72
3     319
3
3
. . .

我认为左外连接会给我我想要的东西,使用我左边的查询结果(通过公共表格表达式)和我右边的表格。但是当我尝试它时,这就是我得到的:

Item  S/N
1
1
1
2     416
3     72
3     72
3     72
3     72
3     319
3     319
3     319
3     319
. . .

看起来查询在匹配项目上执行交叉连接,但在没有匹配时保留左侧行基数;不是我想要的。是否有可以用来获得我想要的连接或方法?

1 个答案:

答案 0 :(得分:0)

您可以使用row_number()

执行此操作
select t1.item, t2.s_n
from (select t1.*,
             row_number() over (partition by item order by item) as seqnum
      from t1
     ) t1 left join
     (select t2.*
             row_number() over (partition by item order by item) as seqnum
      from t2
     ) t2
     on t1.item = t2.item and t1.seqnum = t2.seqnum;