0

我有一张桌子

id:name:passportnumber:score
1:xxx:123456:99
2:yyy:789012:88
3:xxx:123456:11
4:xxx:123456:44
5:xxx:123456:66
6:xxx:123456:77

我想删除重复的旧行并只保留具有相同护照号码的最新行

id:name:passportnumber:score    
2:yyy:789012:88
6:xxx:123456:77

没有临时表的最佳方法是什么

谢谢

4

2 回答 2

6

您应该能够对您的表进行自联接并执行删除:

delete t1
from yt t1
inner join yt t2
  on t1.passportnumber = t2.passportnumber
where t1.id < t2.id;

请参阅带有演示的 SQL Fiddle

于 2013-04-30T18:01:48.060 回答
1

一个LEFT JOINDELETE能做到的;

DELETE Table1 FROM Table1
LEFT JOIN Table1 b
  ON Table1.id<b.id 
 AND Table1.passportnumber=b.passportnumber
WHERE b.id IS NOT NULL;

一个用于测试的 SQLfiddle

于 2013-04-30T18:02:56.707 回答