2017-04-16 86 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