电子商务网站系统详细设计的内容,网站建设进程方案,可以做推文的网站,哪个网站的域名到期直接注册工作或面试中经常能遇见一种场景题#xff1a;删除冗余的数据#xff0c;以下是举例介绍相应的解决办法。
举例#xff1a; 表结构#xff1a; 解法1#xff1a;子查询 获取相同数据中id更小的数据项#xff0c;再将id不属于其中的数据删除。-- 注意#xff1a;mysql中…工作或面试中经常能遇见一种场景题删除冗余的数据以下是举例介绍相应的解决办法。
举例 表结构 解法1子查询 获取相同数据中id更小的数据项再将id不属于其中的数据删除。-- 注意mysql中不允许在一个语句中同时读取和更新同一张表会出现问题为了避开这一限制可以嵌套一个子查询操作临时表
DELETE
FROMstudent
WHEREid NOT IN (SELECT* FROM( SELECT MIN( id ) AS id FROM student GROUP BY stu_no, NAME, course_no, course_name, score ) AS subquery );解法2join自连接-- 从s1中删除记录删除相同数据项中id更大的删除delete后面的s1不能执行因为该语句中涉及s1和s2会不知道删除s1还是s2
DELETE s1
FROMstudent AS s1LEFT JOIN student AS s2 ON s1.stu_no s2.stu_no AND s1.name s2.name AND s1.course_no s2.course_no AND s1.course_name s2.course_name AND s1.score s2.score
WHEREs1.id s2.id解法3分区排序删除-- 先创建临时表再根据临时表中的结果删除原表使用row_number()先分区再排序序号大于1的就是冗余数据
WITH CTE AS(SELECT * , ROW_NUMBER() over (PARTITION by stu_no, name, course_no, course_name, score ORDER BY id) as row_numFROM student
)DELETE from student WHERE id in (select id from CTE where row_num 1)以上为个人学习分享如有问题欢迎指出