【Leetcode】196. 중복 이메일 삭제

5095 단어 데이터베이스

제목 설명


SQL 조회를 작성하여 Person 테이블의 모든 중복된 전자 메일박스를 삭제하고, 중복된 메일박스에는 Id의 가장 작은 것만 보존합니다.
+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
| 3  | [email protected] |
+----+------------------+
Id  。

예를 들어, 쿼리 문구를 실행한 후 위의 Person 테이블은 다음 행을 반환해야 합니다.
+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
+----+------------------+

MySQL 스크립트

-- ----------------------------
-- 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','[email protected]');
INSERT INTO `person` VALUES ('2','[email protected]');
INSERT INTO `person` VALUES ('3','[email protected]');

본제 대답


조회 목표: 기록 조회 범위를 삭제합니다:Person표 조회 조건: 모든 중복된 전자 메일을 삭제하고, 중복된 메일에는 Id의 가장 작은 것만 보존합니다.분명히 이 조회 조건을 통해 두 개의 and 관계의 조건을 추출할 수 있다. (1) 모든 중복된 전자 메일박스를 찾아내고 (2) Id가 큰 중복된 메일박스를 삭제한다.
  • 조건(1)에 대해 모든 중복된 전자 우편함, 즉p1.Email = p2.Email ;
  • 조건(2)에 대해 중복 메일박스 중 Id가 비교적 큰 것을 판단해야 한다p1.Id > p2.Id
  • # Write your MySQL query statement below
    DELETE p1
    FROM Person p1,Person p2
    WHERE (p1.Email = p2.Email) AND (p1.Id > p2.Id);
    

    좋은 웹페이지 즐겨찾기