2016-02-12 61 views
1

以下代码返回特定列的重复行列表。在这种情况下,我试图找到大学名称的重复。我的问题是如何删除重复项,并为每个不同的university_name留下一份副本?SQL如何删除特定列的重复行并保留一行

Select * from `university` where `university_name` in (select `university_name` from `university` group by `university_name` having count(*) > 1) 

这是结果:

enter image description here 能否请你解释我是很新的SQL!先谢谢你!!如果你想保持与最低值ID行

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 
+0

如果您不在乎要删除哪两个,请将整个结果分组并选择其ID。然后删除结果。如果你想删除第二个,你可以选择MAX(id)。 – ericosg

+0

如果有一个university_name重复,您想保留哪一行? – jarlh

+0

实际上我可能想要更大的id被删除并保留最低的id以供将来参考 – Sol

回答

1

1):

DELETE a 
FROM university a, university b 
WHERE a.id > b.id 
AND b.university_name=a.university_name 

2)如果你想保持与最高值ID行

+0

我无法检查这是否正常,但感谢您的帮助 – Sol

+1

实际上这没有奏效我试过了! https://gyazo.com/bf21a00dd6b132a60846934b343c35db – Sol

+1

更新了我的回答 –

1

试试这个:

DELETE a 
FROM university a, university b 
WHERE a.id < b.id 
AND b.university_name=a.university_name 
+1

这项工作非常感谢你! – Sol

0

删除重复项,保留该行与最古老的ID

DELETE a 
FROM university a 
JOIN university b ON a.university_name = b.university_name 
WHERE a.id > b.id 
相关问题