SchoolId StudentName
101 Majid Bhuiyan
101 Majid Bhuiyan
102 Arif
103 Tamim Rahman
104 Sourov Doggesh
我希望它是 mySql 代码。如何仅删除该重复行中的一行。
学校编号:101 学生姓名:Majid Bhuiyan 这是数据表中出现的两次。 请有人帮我解决这个问题。
您可以通过
group by
查找相似的行,并根据要删除的记录按最小值或最大值聚合 id。
DELETE FROM DETAILS
WHERE id NOT IN (
SELECT MIN(id)
FROM DETAILS
GROUP BY EMPNAME, DEPT, CONTACTNO, CITY
);
Select * FROM DETAILS;
正如您在这里所看到的,我们正在删除具有最小 id 的重复记录(如果 id 是自动生成的,则意味着第一个创建的记录)。
希望这有帮助!
首先创建一个名为
tmp_students
的临时表,其中包含每个重复 SchoolId
记录的最小值 StudentName
,然后将原始学生表连接到此临时表以查找所有重复项。
CREATE TABLE tmp_students AS
SELECT MIN(SchoolId) AS SchoolId, StudentName
FROM students
GROUP BY StudentName
HAVING COUNT(*) > 1;
第二删除匹配的学生记录。这将保留具有最小
SchoolId
的行。
删除临时表,因为不再需要它。
DELETE s1 FROM students s1
JOIN tmp_students s2
ON s1.SchoolId = s2.SchoolId;
DROP TABLE tmp_students;