我想从学生表中删除重复的记录。我使用的是MySQL服务器版本5.7
create table student (
sid int not null,
sname varchar(50) not null,
city varchar(50) not null
) ;使用自联接删除重复记录运行良好
delete t1 from student as t1
inner join student as t2
on t1.sid < t2.sid and t1.sname = t2.sname;使用子查询删除重复记录不工作
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
它不起作用。
发布于 2020-04-10 13:47:03
坚持使用join版本。子查询版本的问题是,MySQL不识别嵌套在多个级别的关联子句。
这使得构建查询变得很困难。虽然有可能,但这并不值得。在MySQL中,您知道正确的方法。嵌套的子查询实际上是绕过其他数据库中不需要的MySQL限制的一种方法。
发布于 2020-04-10 14:02:11
子查询方法无法工作,因为第二个嵌套查询
select min(sid) from student s2 where s2.sname = sname不引用要删除的表,即s2.sname = sname中的s2.sname = sname引用相同的s2表,因此子查询与
select min(sid) from student s2 where s2.sname = s2.sname如果您想坚持使用子查询方法,您应该将use a derived table如下所示:
DELETE FROM
student
WHERE EXISTS (
SELECT 1 FROM (SELECT * FROM student) AS s2
WHERE s2.sname = student.sname AND student.sid > s2.sid)https://stackoverflow.com/questions/61141583
复制相似问题