加入时没有重复的记录/结果集

时间:2019-01-08 01:34:58

标签: sql db2

我试图弄清楚如何联接两个表,其中一个表本质上具有重复的行,但仅返回一个结果集。基本上,tableOne具有项目和类别,而tableTwo是唯一具有项目颜色的位置,但是该表中的某些记录具有用于位置的多行。那里确实没有区别,只是出于遗留数据的目的。

我只需要该项目的颜色,它在表2中始终是相同的,但是由于表2中有4条记录,我的以下查询总是返回4条我只想要一条的记录

tableOne

item | category
---------------
 1        A

tableTwo

item  |  category  |  color  |  location
-----------------------------------------
 1         A           Red        1
 1         A           Red        2
 1         A           Red        3
 1         A           Red        4

查询:

select t1.item,t2.category,t2.color
from tableOne t1
left join tableTwo t2 
    on t1.item = t2.item 
    and t1.category = t2.category

我该如何运行以实质上忽略位置,而仅返回DB2中查询的一条记录?

2 个答案:

答案 0 :(得分:2)

一种方法使用row_number()

select t1.item, t1.category, t2.color
from tableOne t1 left join
     (select t2.*,
             row_number() over (partition by item, category order by item) as seqnum
      from tableTwo t2 
     ) t2
     on t2.item = t1.item and
        t2.category = t1.category and
        t2.seqnum = 1;

我认为您应该从category中提取t1,而不是t2,除非您在没有匹配项时明确想要一个NULL值。

答案 1 :(得分:1)

使用SELECT DISTINCT

select distinct t1.item,t2.category,t2.color 
from tableOne t1
left join tableTwo t2 on t1.item = t2.item and t1.category = t2.category