2017-04-16 91 views
2

我有表T1SQL后,JOIN去除重复行

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在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列表,但在T2表中他负责多少次并不重要。我需要做出某种区别。

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

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

预先感谢您

回答

5

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

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 
+0

谢谢你这个作品!我将其标记为答案。只是一个简短的问题。如果我需要过滤T2,我应该在哪里添加额外的sql语句:在T大括号中还是在查询结尾?对于额外的T1过滤我想我在查询结束时添加它,但对于T2我有疑虑?谢谢 – Dejan

+0

如果该筛选器仅属于T2表,则可以将此语句添加到子查询中。 (在T括号内)。 –

1

您可以使用不同的keyward在乌尔查询来获取想要的结果。

select distinct t1.id,t1.status,t2.owner 
    FROM t1 
    join t2 
    on t1.id=t2.id 
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