从选择查询中删除重复的ID

时间:2017-07-05 07:55:13

标签: oracle oracle12c

我有下表

ID     NAME    POINT
100    AAA     100
200    DDD     100
300    FFF     50

我想从此表中删除重复的ID。我想在下面

DISTINCT

我已经在我的选择查询中使用SELECT DISTINCT ID,NAME,POINT FROM Tab ORDER BY ID; 关键字喜欢这个

www.mywebsite.com

不行。我只需要每个记录一个唯一的ID。那么如何从select查询中删除重复的id?我的条件是如果所有记录都相同,则取第一条记录。

3 个答案:

答案 0 :(得分:4)

CREATE TABLE #Table1
    ([ID] int, [NAME] varchar(3), [POINT] int)
;

INSERT INTO #Table1
    ([ID], [NAME], [POINT])
VALUES
    (100, 'AAA', 100),
    (100, 'AAA', 150),
    (100, 'AAA', 70),
    (200, 'DDD', 100),
    (200, 'DDD', 65),
    (300, 'FFF', 50)

SELECT ID,NAME,POINT FROM (SELECT* , ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID,NAME ) AS RN FROM #TABLE1)A
WHERE RN=1

输出

ID     NAME    POINT
100    AAA     100
200    DDD     100
300    FFF     50

答案 1 :(得分:3)

我认为最简单的选择是group by语句。那就是:

SELECT ID, NAME, POINT GROUP BY ID

您可能需要添加一些其他逻辑,深化您要选择的POINT值(例如,max,min等)。那就是:

SELECT ID, NAME, MAX(POINT) GROUP BY ID, NAME

答案 2 :(得分:0)

使用rowid伪列。

DELETE FROM your_table
WHERE rowid not in (SELECT MIN(rowid) FROM your_table GROUP BY id, name);

如果您的PK中有更多列,请将其添加到group by列表中。