You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库如何从两张不同表获取唯一的Item与Store配对值

Oracle数据库实现Item与Store字段无重复唯一配对方案

需求背景

当前使用Oracle数据库,存在两张表T1和T2,需要提取T1的Item字段与T2的Store字段,目标是得到两个字段均无重复的行级唯一配对结果,即每个Store对应1个唯一Item。

已尝试的失效方案

先后测试两种查询方案均未达到预期:

  • 对两张表分别去重后做全外连接,再对结果加distinct去重,该查询耗时极长,且返回结果中同一个Store对应多个Item,不符合要求;
  • 按Store分组后取Item最大值,只能得到单条Item结果,无法输出全量的唯一配对。

表结构说明

两张表核心字段如下:

  • T1表字段:ID、Item、ITEM_ID、CREATE_DATE、UPDATE_DATE
  • T2表字段:Store、ITEM_ID、Itemsale、Status

可行解决方案

分别对两张表的目标字段用DENSE_RANK函数生成排序序号,按序号关联两张表即可得到所需结果,代码如下:

select T1.Item,T2.Store 
from
(SELECT  Item, DENSE_RANK() OVER (ORDER BY Item )  rnk from T1 group by Item   ) T1
inner join 
(SELECT Store ,DENSE_RANK() OVER (ORDER BY Store )  rnk  from T2 group by Store ) T2
on T1.rnk=T2.rnk

方案逻辑说明

  • 先通过group by分别对T1的Item、T2的Store去重,保证两个子查询返回的目标字段无重复值
  • 用DENSE_RANK窗口函数给去重后的目标字段生成连续排序序号
  • 通过序号做等值关联,即可实现每个Store对应唯一的Item,且两个字段均无重复
  • 若T1去重后Item数量和T2去重后Store数量不一致,inner join会返回数量等于较小值的配对结果,如果需要保留全部数据可改为full outer join,缺失的字段值会返回null

内容的提问来源于stack exchange,提问作者Amin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 15:54:10