私は、それぞれpart
が1つのランダム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を両方とも赤色にしてみませんか?あなたは* injective *関数が必要ですか(異なるモデルは異なる色を持たなければなりません)?それができない場合はどうしますか?利用可能な色よりもモデルが多い場合はどうしますか?この問題自体は、詳細な説明がなくても100%意味をなすわけではありません。 – mathguy