我试图弄清楚如何联接两个表,其中一个表本质上具有重复的行,但仅返回一个结果集。基本上,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中查询的一条记录?
答案 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