하나, 무거운 두 가지 기본 방법
1 DISTINCT
## 테이블 : 내장 은 CREATE TABLE의 교사 ( teacher_id VARCHAR ( 50 ) TEACHER_NAME VARCHAR ( 50 ) id_no VARCHAR ( 50 ) ) 는 CREATE 인덱스 idx_teacher_id 온 교사 (teacher_id)를, 중복 데이터를 삽입 : 삭제 로부터 교사, 삽입 INTO 교사 값 ( ' 20180204060001 ' , ' 빈 ' , ' 530102192005080114 ' ); INSERT INTO 교사 VALUES ( ' 20180204060002 ' , ' 张의成' , ' 530102192005080115 ' ); INSERT INTO 교사 VALUES ( ' 20180204060001 ' , ' 李斌' , ' 530102192005080114 ' ); INSERT INTO 교사 VALUES ( ' 20180204060002 ' , ' 张의成' , ') INSERT INTO 교사 VALUES ( ' 20,180,204,060,001 ' , ' 함 ' , ' 530,102,192,005,080,114 ' ) INSERT INTO 교사 VALUES ( ' 20,180,204,060,002 ' , ' 장 ' , ' 530,102,192,005,080,115 ' ) DISTINCT에 다시 쿼리 은 SELECT DISTINCT * FROM 교사; 그룹 중복 제거의 질문에 의해 : 선택 (SELECT) teacher_id, MIN (TEACHER_NAME) MIN (id_no) FROM 교사 GROUP BY teacher_id;
중복 데이터가 동일하다, 당신은에 의해 그룹을 사용할 수 있지만 중복 데이터가 정확하지 않을 때, 아마 잘못 동일 갈 것이다;
둘째, 다른 6 디엠의 방법
## 동일한 데이터를 반복, 그들은 그룹을 사용 하여 ,하지만 중복 데이터가 동일하지 않을 때, 잘못 될 수도, 데이터를 삽입 삭제 의를 교사, 삽입 INTO 교사 값 ( ' 20,180,204,060,001 ' , ' 빈 ' , ' 530,102,192,005,080,114 ' ) 삽입 로 교사 값 ( ' 20,180,204,060,002 ' , ' 장 ' , ' 530,102,192,005,080,115 ' ) 삽입 로 교사 값 (' 20180204060001 ' , ' 흰색 함 ' , ' 630,102,192,005,080,114 ' ) 삽입 INTO 교사 값 ( ' 20,180,204,060,002 ' , ' 조 ' , ' 630,102,192,005,080,115는 ' ); ### ( 1 ) 부질 수있다 + 그룹 별로 : SELECT * 로부터 교사 (a.teacher_id, a.id_no) 에서이 ( SELECT b.teacher_id, 최대(b.id_no) id_no 에서 교사 B의 그룹 별 b.teacher_id); ### ( 2 ) SELECT * FROM 교사 A를 NOT EXISTS ( SELECT 1 FROM 교사 B WHERE a.teacher_id = b.teacher_id AND a.id_no > b.id_no); ###은 ( 3 ) SELECT 을 수행합니다. * FROM 교사 A를 WHERE a.id_no <= ALL ( SELECT b.id_No을 FROM 교사 B WHERE a.teacher_id = b.teacher_id ); ###은 ( 4 ) SELECT 을 수행합니다. * FROM 교사 INNER JOIN 교사 B ON a.teacher_id = b.teacher_id AND a.id_no > =를 b.id_no GROUP BY a.id_no a.teacher_id, a.teacher_name, HAVING COUNT ( * ) = 1 ; ### ( 5 ) SELECT teacher_id, SUBSTRING_INDEX ( GROUP_CONCAT (TEACHER_NAME의 ORDER BY id_no ASC ), ' , ' , 1 ), SUBSTRING_INDEX ( GROUP_CONCAT (id_no ORDER BY id_no ASC ), ' , ' , 1 ) FROM 교사 GROUP BY teacher_id; ### ( 6 ) SELECT id_no teacher_id, TEACHER_NAME, FROM ( SELECT teacher_id, TEACHER_NAME, id_no, ROW_NUMBER () OVER (분할 BYteacher_id ORDER BY id_no ASC를 ) AS rn_no 의 FROM 교사 ) 를 Where rn_no = 1 ; MySQL은 ROW_NUMBER () 표현을 지원하지 않습니다!