我想加入这两个表,但我想让每个ID + MODEL都有一个独特的颜色。
<% for(var i=0; i<users.lenght; i++) { %>
<li> <%= users[i] %> </li>
<% } %>
TO-BE
Table 1 Table 2
PART Model PART COLOR
-------------- ------------
1 XXX 1 RED
1 YYY 1 BLUE
2 ZZZ 1 YELLOW
在上面的示例中,1 + XXX具有RED,因此RED将连接到任何其他行。 这样做有一个很酷的技巧吗?我到处搜索,但除了将结果存入表格外,我无法提出解决方案。
谢谢!
答案 0 :(得分:2)
我没有看到连接条件背后的逻辑,除了每个part
创建一个随机model
+ color
组合。
我们可以通过为每个part
引入一个唯一ID来与每个人最喜欢的分析函数row_number
一起使用,然后在联接中使用它。
请注意,因为partition by part order by part
部件已按顺序排列&#34;随机&#34; (即数据库引擎决定顺序而不是你)。
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 :(得分:0)
这里没有人可以解决你的逻辑问题:也许这表明最好通过向引用前两个的第三个表添加行来建模:例如:这是标准SQL中的草图:
CREATE TABLE Table1
(
PART INT NOT NULL,
MODEL CHAR(3) NOT NULL,
UNIQUE ( MODEL, PART )
);
CREATE TABLE Table2
(
PART INT NOT NULL,
COLOR CHAR(10) NOT NULL,
UNIQUE ( COLOR, PART )
);
CREATE TABLE ToBe
(
PART INT NOT NULL,
MODEL CHAR(3) NOT NULL,
COLOR CHAR(10) NOT NULL,
FOREIGN KEY ( MODEL, PART )
REFERENCES Table1 ( MODEL, PART ),
FOREIGN KEY ( COLOR, PART )
REFERENCES Table2 ( COLOR, PART ),
UNIQUE ( COLOR, MODEL, PART )
);