将UID限制为一个类别(删除每个用户的所有其他类别)

时间:2013-06-14 02:59:10

标签: sql oracle

我有以下生成的表(非规范化):

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个类别?

谢谢

1 个答案:

答案 0 :(得分: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 Fiddle