> 데이터 베이스 > MySQL 튜토리얼 > mysql의 두 가지 중복 제거 방법에 대한 자세한 예

mysql의 두 가지 중복 제거 방법에 대한 자세한 예

怪我咯
풀어 주다: 2017-07-05 11:08:18
원래의
2647명이 탐색했습니다.

이 글에서는 mysql의 두 가지 중복 제거 방법과 관련 정보를 예제 코드에 대해 하나씩 소개합니다. 필요한 친구는

mysql Re-

방법 1:

MySQL을 사용할 때 특정 필드의 중복 레코드를 query해야 하는 경우가 있습니다. 그러나 mysql은 중복된 중복 레코드를 필터링하고 이를 유지하기 위한 고유 키워드를 제공합니다. 중복되지 않은 레코드의 모든 값을 반환하는 데 사용하지 않고 고유 레코드 수를 반환하는 데에만 사용되는 경우가 많습니다. 그 이유는 구별은 대상 필드만 반환할 수 있고 other필드

를 반환할 수 없기 때문입니다. 먼저 예를 살펴보겠습니다.

   table
  id name
  1 a
  2 b
  3 c
  4 c
  5 b
로그인 후 복사

라이브러리 구조는 대략 다음과 같습니다. 실제 상황은 훨씬 더 복잡할 것입니다.

예를 들어, 하나의 명령문을 사용하여 중복되지 않은 이름을 가진 모든 데이터를 쿼리하려면 Unique를 사용하여 중복된 중복 레코드를 제거해야 합니다.

select distinct name from table
로그인 후 복사

얻은 결과는

 name
  a
  b
  c
로그인 후 복사

효과를 얻은 것 같은데, 내가 얻고 싶은 것은 id 값인가요? 쿼리 문을 변경합니다.

select distinct name, id from table
로그인 후 복사

결과는 다음과 같습니다.

 id name
  1 a
  2 b
  3 c
  4 c
  5 b
로그인 후 복사

distinct가 작동하지 않는 이유는 무엇입니까? 작동하지만 동시에 두 필드에 영향을 미칩니다. 즉, 삭제하려면 ID와 이름이 동일해야 합니다. . . . . . .

쿼리 문을 다시 변경해 보겠습니다.

select id, distinct name from table
로그인 후 복사

안타깝게도 오류 메시지 외에는 아무것도 얻을 수 없습니다. 고유한 내용을 처음에 배치해야 합니다. where 조건에 구별을 두는 것이 그렇게 어려운가요? 오류를 보고할 수 있습니다. . . . . . .

최종 유용한 설명은 다음과 같습니다.

select *, count(distinct name) from table group by name
로그인 후 복사

결과:

  id name count(distinct name)
  1 a 1
  2 b 1
  3 c 1
로그인 후 복사

마지막 항목은 중복됩니다. 그냥 놔두면 목적이 달성됩니다. . . . .

아, 네, 그런데 group by는 order by와limit 전에 배치되어야 합니다. 그렇지 않으면 오류가 보고됩니다. . . . . . . . ! OK

요약 문: select *, count(distinct name) from (select * from table... 및 기타 중첩 문) group by name

방법 2:

group by 사용

SELECT * FROM( 
select * from customer where user=( 
  SELECT source_user from customer WHERE user='admin') UNION ALL select * from customer where user=( 
  select source_user from customer where user=( 
    SELECT source_user from customer WHERE user='admin')) union ALL select * from customer where user=( 
  select source_user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))) UNION ALL select * from customer where source_user=(/*我的上线的上线的user*/ 
  select user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))) union all select * from customer where source_user=(/*我的上线的上线的上线user*/ 
  select user from customer where user=( 
  select source_user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))))) as alias group by user;
로그인 후 복사

별칭을 추가할 때 주의하세요. 그렇지 않으면 오류가 보고됩니다. where 문 외부에 별칭을 래핑한 다음 그룹 기준을 사용하여 중복 항목을 제거하세요.

위 내용은 mysql의 두 가지 중복 제거 방법에 대한 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿