文档章节

LeetCode:Delete Duplicate Emails - 删除重复的邮箱数据

北风其凉
 北风其凉
发布于 2016/03/22 00:54
字数 427
阅读 353
收藏 2

1、题目名称

Delete Duplicate Emails(删除重复的邮箱数据)

2、题目地址

https://leetcode.com/problems/delete-duplicate-emails/

3、题目内容

写一个SQL删除表Person中所有的重复数据,对于重复的数据只保留Id最小的数据

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+
Id is the primary key column for this table.

例如,在执行完该SQL后,表中剩余数据如下:

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

4、初始化数据库脚本

在MySQL数据库中建立一个名为LEETCODE的数据库,用MySQL命令行中的source命令执行下面脚本:

-- 执行脚本前必须建立名为LEETCODE的DATABASE
USE LEETCODE;
  
DROP TABLE IF EXISTS Person;
CREATE TABLE Person (
  Id INT NOT NULL PRIMARY KEY,
  Email VARCHAR(50)
);

-- INSERT INTO Person (Id, Email) VALUES (1, 'john@example.com');
-- INSERT INTO Person (Id, Email) VALUES (2, 'bob@example.com');
-- INSERT INTO Person (Id, Email) VALUES (3, 'john@example.com');
INSERT INTO Person (Id, Email) VALUES (1, 'tsybius@example.com');
INSERT INTO Person (Id, Email) VALUES (2, 'tsybius@example.com');

5、解题SQL1

下面是一个比较简单的写法

DELETE P2 FROM Person AS P1, Person AS P2
WHERE  P1.Email = P2.Email AND
       P1.Id < P2.Id;

6、解题SQL2

另一种写法是使用 NOT IN 来写,但下面的写法是有问题的,放在MySQL中执行时会报错

DELETE FROM Person
WHERE  Id NOT IN (SELECT MIN(ID) MIN_ID
                  FROM   Person
                  GROUP  BY Email)

报错信息如下:

ERROR 1093 (HY000): You can't specify target table 'Person' for update in FROM clause

这是因为SELECT语句不能直接出现在UPDATE语句(DELETE语句也是一样)的WHERE子句中,把SQL改成下面这样就可以AC了:

DELETE FROM Person
WHERE  Id NOT IN (SELECT TMP.MIN_ID
                  FROM   (SELECT MIN(ID) MIN_ID
                          FROM   Person
                          GROUP  BY Email) TMP);

END

© 著作权归作者所有

北风其凉

北风其凉

粉丝 119
博文 498
码字总数 463468
作品 4
朝阳
程序员
私信 提问
【sql】删除重复的邮件 Delete Duplicate Emails

问题: Write a SQL query to delete all duplicate email entries in a table named , keeping only unique emails based on its smallest Id. +----+------------------+| Id | Email |+--......

叶枫啦啦
2017/11/13
0
0
LeetCode:Duplicate Emails - 重复出现的Email

1、题目名称 Duplicate Emails(重复出现的Email) 2、题目地址 https://leetcode.com/problems/duplicate-emails/ 3、题目内容 有一个数据表包括Id和Email两列,找出数据表内Email列内容重复...

北风其凉
2015/08/16
0
0
【sql】统计重复出现的邮箱 Duplicate Emails

问题: Write a SQL query to find all duplicate emails in a table named . +----+---------+| Id | Email |+----+---------+| 1 | a@b.com || 2 | c@d.com || 3 | a@b.com |+----+-------......

叶枫啦啦
2017/11/09
0
0
LeetCode 721. Accounts Merge

原题 Given a list accounts, each element accounts[i] is a list of strings, where the first element accounts[i][0] is a name, and the rest of the elements are emails representing......

likewind1993
2017/11/17
0
0
Mysql中Insert into xxx on duplicate key update问题

一,on duplicate key update 在看代码的过程中碰到了这一用法,不太理解,google了一下。它的意义其实是如果在insert语句末尾制定了on duplicate key update语句的话,则当插入行会导致一个...

君满楼001
2017/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部