web-dev-qa-db-ja.com

JOIN後のSQLによる重複行の削除

テーブル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 
6
Dejan

私が正しく理解しているなら、これが必要です:

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 
10
Oto Shavadze

URLクエリで個別のキーワードを使用して、目的の結果を得ることができます。

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