JOIN之后的SQL删除重复的行

时间:2017-04-16 08:19:04

标签: sql select join duplicates db2

我有表T1

ID   STATUS
1    NEW
2    CLOSED
3    NEW

我有表T2

ID   OWNER 
1    A
1    B
1    C
1    A
1    B
2    A
2    B
2    A
3    A

我想加入T1和T2,并为每个不同的ID和每个不同的OWNER提​​供多行。如果OWNER在T2中重复多次,应该被忽略,并且应该删除重复项。

所以最终的期望结果应该是:

ID  STATUS  OWNER
1   NEW     A
1   NEW     B
1   NEW     C
2   CLOSED  A
2   CLOSED  B
3   NEW     A

因此,您可以看到应删除重复项(多次使用相同ID的相同所有者)。我只需要输出作为ID的列表以及该ID的每个不同的OWNER,但是在T2表中他负责的次数并不重要。我需要以某种方式区分。

如果我像这样进行查询,我没有得到每个ID和OWNER的不同值,但在这种情况下我也有重复。

    select t1.id,t1.status,t2.owner 
    FROM  t1
    join t2 
    on t1.id=t2.id 

提前谢谢

4 个答案:

答案 0 :(得分:8)

如果我理解正确,你需要这个:

select T1.ID, T1.STATUS, t.OWNER from T1
inner join(
    select ID, OWNER from T2 group by ID, OWNER
) t
on T1.ID = t.ID 

答案 1 :(得分:2)

您可以在ur查询中使用distinct keyward来获得所需的结果。

select distinct  t1.id,t1.status,t2.owner 
    FROM  t1
    join t2 
    on t1.id=t2.id 

答案 2 :(得分:0)

with T2b as (
  select * from (
    select t2.*, rownumber() over(partition by t2.ID, t2.OWNER ) rang
    from t2
  ) tmp 
  where rang=1
)
select t1.*, T2b.OWNER 
from t1 inner join T2b on t1.id=T2b.id 

答案 3 :(得分:0)

总而言之,很可口。

create table #T1 ([ID] int, [Status] varchar(50))
INSERT INTO #T1 VALUES
(1, 'NEW'),
(2, 'CLOSED'),
(3, 'NEW')

create table #T2 ([ID] int, [Owner] varchar(50))
INSERT INTO #T2 VALUES
(1, 'A'),
(1, 'B'),
(1, 'C'),
(1, 'A'),
(1, 'B'),
(2, 'A'),
(2, 'B'),
(2, 'A'),
(3, 'A')

SELECT DISTINCT
 T.[ID],
 T.[Status],
 U.[Owner]
    FROM #T1 T
JOIN #T2 U ON T.[ID] = U.[ID]

我在SSMS的SQL Server中完成了工作,但是几乎所有与SQL兼容的引擎都可以毫无问题地完成这项工作。

抱歉,我认为在示例中可能会学习到独特的减少行的课程,但是只有DISTINCT可以完成所有工作。