196.删除重复的邮件
编写一个SQL查询来删除Person
表中所有重复的电子邮件,在重复的邮件中只保留Id最小的邮件。
用到的表和数据SQL:
-- ----------------------------
-- Table structure for `person`
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`Id` int(11) DEFAULT NULL,
`Email` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES ('1','john@example.com');
INSERT INTO `person` VALUES ('2','bob@example.com');
INSERT INTO `person` VALUES ('3','john@example.com');
答案:
此题使用内连接让两个表以邮箱关联起来,然后把相同邮箱且Id大的删除掉。
DELETE p2 FROM Person p1 JOIN Person p2
ON p2.Email = p1.Email WHERE p2.Id > p1.Id;
写的比较粗糙,有不理解的可以扫描二维码加QQ群找我解答。