我无法选择加入条件背后的逻辑,除了每个part
创建一个随机model
+ color
组合。
我们可以通过为每个part
引入一个唯一的ID与每个人最喜欢的分析函数row_number
然后在连接中使用它。
请注意,因为partition by part order by part
零件是“随机”排序的(即数据库引擎决定顺序不是你)。
with
models(part, model) as (
select 1, 'XXX' from dual union all
select 1, 'YYY' from dual union all
select 2, 'ZZZ' from dual
),
models2(part, rn, model) as (
select
part
,row_number() over (partition by part order by part) as rn
,model
from models
),
colors(part, color) as (
select 1, 'RED' from dual union all
select 1, 'BLUE' from dual union all
select 1, 'YELLOW' from dual
),
colors2(part, rn, color) as (
select
part
,row_number() over (partition by part order by part) as rn
,color
from colors
)
select
models2.part
,models2.model
,colors2.color
from models2
inner join colors2 on colors2.part = models2.part
and colors2.rn = models2.rn
;
结果
PART MODEL COLOR
---- ---------- ----------
1 XXX RED
1 YYY YELLOW
为什么不让1个XXX和1个YYY都是RED?你需要一个* injective *函数(意味着不同的模型必须有不同的颜色)?如果这是不可能的 - 如果有更多的模型比可用的颜色怎么样?没有更多的细节,问题本身并没有100%的意义。 – mathguy