1

次の生成されたテーブルがあります(非正規化):

UID (int)  | CATEGORY(int) | product_title (varchar)

データは次のようになります。

1 | 1 | title1
1 | 1 | title2
1 | 2 | title3
1 | 2 | title4
2 | 1 | title2
2 | 2 | title4
.
.
.

すべての (他の) カテゴリを削除することはできますか (ユーザーに 1 つのカテゴリのみを残して残りを削除します)? ORACLEで1つのクエリを使用していますか?

したがって、データは次のようになります。

1 | 1 | title1
1 | 1 | title2
2 | 5 | title5
2 | 5 | title6
.
.
.

すべての UID には、複数のタイトルを持つカテゴリが 1 つだけあるのでしょうか? ユーザーごとに n-1 カテゴリを破棄するだけですか?

ありがとう

4

1 に答える 1

1

これは次のようになります。

DELETE Table1 
WHERE 
("UID", CATEGORY) IN
(SELECT "UID", CATEGORY FROM
 (
  select "UID", CATEGORY,
  RANK() OVER(PARTITION BY "UID" ORDER BY CATEGORY) rk
  FROM Table1
 ) t 
 WHERE t.rk > 1
);

SQL フィドル

于 2013-06-14T05:03:41.293 に答える