SQL 如何删除特定列的重复行并保留一个
SQL How to delete duplicate rows of a specific column and keep one
下面的代码returns 列出了特定列的重复行。在这种情况下,我试图找到大学名称的重复项。我的问题是如何删除重复项并为每个不同的 university_name?
只保留一份副本
Select * from `university` where `university_name` in ( select `university_name` from `university` group by `university_name` having count(*) > 1 )
这是结果:
你能解释一下我是 SQL 的新手吗!提前致谢!!
试试这个:
DELETE u
FROM university u
LEFT JOIN
(
SELECT MIN(ID) ID, university_name
FROM university
GROUP BY university_name
) v ON u.ID = v.ID AND
u.university_name = v.university_name
WHERE v.ID IS NULL
1) 如果要保留id值最小的行:
DELETE a
FROM university a, university b
WHERE a.id > b.id
AND b.university_name=a.university_name
2) 如果要保留id值最高的行:
DELETE a
FROM university a, university b
WHERE a.id < b.id
AND b.university_name=a.university_name
删除重复项并保留 ID 最旧的行
DELETE a
FROM university a
JOIN university b ON a.university_name = b.university_name
WHERE a.id > b.id
下面的代码returns 列出了特定列的重复行。在这种情况下,我试图找到大学名称的重复项。我的问题是如何删除重复项并为每个不同的 university_name?
只保留一份副本 Select * from `university` where `university_name` in ( select `university_name` from `university` group by `university_name` having count(*) > 1 )
这是结果:
试试这个:
DELETE u
FROM university u
LEFT JOIN
(
SELECT MIN(ID) ID, university_name
FROM university
GROUP BY university_name
) v ON u.ID = v.ID AND
u.university_name = v.university_name
WHERE v.ID IS NULL
1) 如果要保留id值最小的行:
DELETE a
FROM university a, university b
WHERE a.id > b.id
AND b.university_name=a.university_name
2) 如果要保留id值最高的行:
DELETE a
FROM university a, university b
WHERE a.id < b.id
AND b.university_name=a.university_name
删除重复项并保留 ID 最旧的行
DELETE a
FROM university a
JOIN university b ON a.university_name = b.university_name
WHERE a.id > b.id