Oracle SQL连接具有与非键列的独占行匹配

时间:2016-11-15 01:36:18

标签: sql oracle join

我想加入这两个表,但我想让每个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将连接到任何其他行。 这样做有一个很酷的技巧吗?我到处搜索,但除了将结果存入表格外,我无法提出解决方案。

谢谢!

2 个答案:

答案 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 )
  );