Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果有三个重复的行,如何保留第一行并删除其他两行?_Sql_Sql Server_Duplicates - Fatal编程技术网

Sql 如果有三个重复的行,如何保留第一行并删除其他两行?

Sql 如果有三个重复的行,如何保留第一行并删除其他两行?,sql,sql-server,duplicates,Sql,Sql Server,Duplicates,相反,如果我有三个唯一的行,如何使用命令来实现这一点?只需使用“distinct”。如果要删除剩余的行,请使用本主题中的说明下面的查询可以删除重复记录 delete from table where rowid not in ( select min(rowid) from table group by unique_id ) 好的,对于sql server,请尝试下面的查询 delete from table where %%physloc%% not in ( sele

相反,如果我有三个唯一的行,如何使用命令来实现这一点?

只需使用“distinct”。如果要删除剩余的行,请使用本主题中的说明

下面的查询可以删除重复记录

delete from table 
where rowid not in (
select min(rowid) from table group by unique_id
)
好的,对于sql server,请尝试下面的查询

delete from table 
    where %%physloc%% not in (
    select min(%%physloc%%) from table group by unique_id
    )

上面对sql server的查询可能会很慢,因为我相信它会进行完整的表扫描。

因此,您有一个包含3行相同行和更多行的表

CREATE TABLE people (id,name) AS
          SELECT 42, 'Arthur Dent'
UNION ALL SELECT 43, 'Zaphod Beeblebrox'
UNION ALL SELECT 42, 'Arthur Dent'
UNION ALL SELECT 44, 'Tricia McMillan'
UNION ALL SELECT 42, 'Arthur Dent'
;
除了创建一个具有重复数据消除行的全新表,并确保它获得原始表的名称之外,几乎没有其他方法。下面是:

ALTER TABLE people RENAME TO people_with_dupes;
CREATE TABLE people AS
SELECT DISTINCT * FROM people_with_dupes;
people
表现在已消除重复:

SELECT * FROM people ORDER BY id;

id|name
42|Arthur Dent
43|Zaphod Beeblebrox
44|Tricia McMillan

发布示例和所需结果。请参阅。