数据库:delete语句

一、DELETE语法

1、删除整个表

delete from 表名;      

 2、删除满足筛选条件的行

delete 别名 from 表名 as 别名 where 筛选条件;
#尽量把条件包在where子句中

二、LEECODE196.删除重复的电子邮箱——使用delete

编写一个SQL查询来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。

查询结果格式如下所示。

示例 1:

输入: 
Person 表:
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+
输出: 
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
+----+------------------+

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/delete-duplicate-emails
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 

方法一:

找出每个email的最小id,将其他删除即可

delete from person where id not in(
    select min(id) as id from person group by email);

注意:上面 代码会报错"You can't specify target table 'person' for update in FROM clause",因为MYSQL不允许同一张表一边查自己一边更新自己,可以使用select子句进行包装

delete from person where id not in(
    select id from(
        select min(id) as id 
        from person 
        group by email) as a);

方法二:

1、先对两个person表内连接,别名分别为a,b

连接条件为  a.id < b.id AND a.email = b.email     连接结果如下

 2、根据题目要求,a表删除这条数据删除即可。代码为

delete a from person as a, person as b 
where a.id > b.id and a.email = b.email

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值