您的位置:首页 > 数据库

leetcode【sql】 Delete Duplicate Emails

2015-11-09 16:08 405 查看
WriteaSQLquerytodeleteallduplicateemailentriesinatablenamedPerson,keepingonlyuniqueemailsbasedonitssmallestId.

+----+------------------+
|Id|Email|
+----+------------------+
|1|john@example.com|
|2|bob@example.com|
|3|john@example.com|
+----+------------------+

Idistheprimarykeycolumnforthistable.
Forexample,afterrunningyourquery,theabovePersontableshouldhavethefollowingrows:

+----+------------------+
|Id|Email|
+----+------------------+
|1|john@example.com|
|2|bob@example.com|
+----+------------------+


DELETEp1FROMPersonp1INNERJOINPersonp2WHEREp1.Email=p2.EmailANDp1.Id>p2.Id;


这里p1和p2都是Person的别名。innerjoin等于join。所以p1joinp2应该是以下的结果:

------+------+-----------------+
|P1.Id|p2.Id|Email|
+-----+------+-----------------+
|1|1|john@example.com|
|2|2|bob@example.com|
|3|3|john@example.com|
+----+-------------------------+
然后p1.id>p2.id所以id为3的被删除了,但是因为p1和p2都是person事实上,只有一个id。为了理解,写成了两列。


补充一些关于sql语句的知识:


sql表别名的用法:as

  select*fromkettleoutputtablea
  wherea.os=2andstorename='anzhi'


  和

  select*fromkettleoutputtableasa
  wherea.os=2andstorename='anzhi'



  等效,也就是说别名的as可以省略!在表明后直接加上简单的名字就行了。



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: