Merge 如何合并两个结果集而不使匹配结果相乘?

Merge 如何合并两个结果集而不使匹配结果相乘?,merge,db2,cross-product,Merge,Db2,Cross Product,我有一个查询,返回项目列表和空白序列号字段,如下所示: Item S/N 1 1 1 2 3 3 3 3 . . . Item S/N 1 1 1 2 416 3 72 3 319 3 3 . . . 由于项目的行数与购买的项目数相对应,因此需要进行复制。我还有一个表,其中包含已收到序列号的项目: Item S/N 2 416 3 72 3 319 . . . 生成第一个列表的查询没有引用带有序列号的表。 现在,我想用表

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

Item  S/N
1        
1
1
2
3
3
3
3
. . .
Item  S/N
1
1
1
2     416
3     72
3     319
3
3
. . .
由于项目的行数与购买的项目数相对应,因此需要进行复制。我还有一个表,其中包含已收到序列号的项目:

Item  S/N
2     416
3     72
3     319
. . .
生成第一个列表的查询没有引用带有序列号的表。 现在,我想用表中的信息修改查询结果 以便将表中的序列号添加到匹配项中。但是,在没有足够的序列号的情况下,我希望保留空白序列号(注意,表中的条目永远不会超过查询的条目)。新结果如下所示:

Item  S/N
1        
1
1
2
3
3
3
3
. . .
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
. . .

看起来查询对匹配项执行交叉联接,但在没有匹配项时保留左侧行基数;不是我想要的。是否有一种联接或方法可用于获取我想要的内容?

您可以使用
行号()来实现这一点。


您正在使用哪个数据库?请用数据库的名称标记问题。虽然我没有使用您的确切解决方案,但我能够将row_number()函数和您的代码合并到我的公共表表达式中,以获得所需的结果。谢谢