我有以下生成的表(非规范化):
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个类别?
谢谢
答案 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
);