首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL使用子查询删除重复数据

MySQL使用子查询删除重复数据
EN

Stack Overflow用户
提问于 2020-04-10 13:44:40
回答 2查看 163关注 0票数 0

我想从学生表中删除重复的记录。我使用的是MySQL服务器版本5.7

代码语言:javascript
复制
create table student (
   sid int not null,
   sname varchar(50) not null,
   city varchar(50) not null
) ;

使用自联接删除重复记录运行良好

代码语言:javascript
复制
 delete t1 from student as t1
 inner join student as t2
 on t1.sid < t2.sid and t1.sname = t2.sname;

使用子查询删除重复记录不工作

代码语言:javascript
复制
delete s1 from student
where sid > (select sid from (select min(sid) from student s2 
where s2.sname = sname) as t); 

我也尝试了以下链接中提到的指示。

Delete duplicate rows using Sub-query

它不起作用。

EN

回答 2

Stack Overflow用户

发布于 2020-04-10 13:47:03

坚持使用join版本。子查询版本的问题是,MySQL不识别嵌套在多个级别的关联子句。

这使得构建查询变得很困难。虽然有可能,但这并不值得。在MySQL中,您知道正确的方法。嵌套的子查询实际上是绕过其他数据库中不需要的MySQL限制的一种方法。

票数 0
EN

Stack Overflow用户

发布于 2020-04-10 14:02:11

子查询方法无法工作,因为第二个嵌套查询

代码语言:javascript
复制
select min(sid) from student s2 where s2.sname = sname

不引用要删除的表,即s2.sname = sname中的s2.sname = sname引用相同的s2表,因此子查询与

代码语言:javascript
复制
select min(sid) from student s2 where s2.sname = s2.sname

如果您想坚持使用子查询方法,您应该将use a derived table如下所示:

代码语言:javascript
复制
DELETE FROM
   student
WHERE EXISTS ( 
   SELECT 1 FROM (SELECT * FROM student) AS s2
     WHERE s2.sname = student.sname AND student.sid > s2.sid)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61141583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档