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
.
.
.

是否可以删除所有(其他)类别(仅让用户保留一个类别并删除其余类别)?在 ORACLE 中使用一个查询?

所以数据会变成这样:

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

那么每个 UID 将只有一个具有多个标题的类别?每个用户只丢弃 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 回答