집 >데이터 베이스 >MySQL 튜토리얼 >mysql 테이블에서 중복 행을 삭제하고 더 작은(또는 더 큰) ID로 레코드를 유지하는 방법
실제 데이터베이스에 입력하는 과정에서 데이터의 양이 상대적으로 많으면 어떤 이유로 인해 여러 개의 중복 레코드가 입력될 수밖에 없습니다. 그렇다면 어떻게 중복 행을 삭제하고 더 큰 ID로 유지할 수 있습니까? 아니면 더 긴 기록인가요?
이번 예시에서 사용한 데이터 테이블 구조는 다음과 같습니다 tdb_goods
테이블의 데이터는 그림과 같이 반복됩니다
첫 번째 단계는 그룹별을 사용하여 각 그룹에서 2보다 큰 숫자(즉, 중복 레코드)가 있는 콘텐츠를 찾는 것입니다.
mysql> SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING COUN T(goods_name)>=2; +----------+------------------------------+ | goods_id | goods_name | +----------+------------------------------+ | 20 | X3250 M4机架式服务器 2583i14 | | 19 | 商务双肩背包 | +----------+------------------------------+ 2 rows in set (0.01 sec)
그런 다음 Left Join을 사용하여 원본 테이블과 위 쿼리 결과를 연결하고, 반복된 레코드를 삭제하고, 더 작은 ID의 레코드를 유지합니다.
mysql> DELETE t1 FROM tdb_goods AS t1 LEFT JOIN( SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING COUNT(goods_name)>=2) AS t2 ON t1.goods_na me = t2.goods_name WHERE t1.goods_id>t2.goods_id; Query OK, 2 rows affected (0.06 sec)
위 문장에서 조건이 동일한 이름인 것을 확인하고 모두 삭제한 다음 상품 ID가 큰 레코드를 모두 삭제합니다. 이렇게 하면 원하는 효과를 얻을 수 있습니다.
더 큰 ID를 유지하고 싶다면 다음과 같습니다
mysql> DELETE t1 FROM tdb_goods AS t1 LEFT JOIN( SELECT max(goods_id) AS goods_i d,goods_name FROM tdb_goods GROUP BY goods_name HAVING COUNT(goods_name)>=2) AS t2 ON t1.goods_name = t2.goods_name WHERE t1.goods_id<t2.goods_id; Query OK, 2 rows affected (0.03 sec)
테이블 조인에 대한 참고 사항이 있는 경우 사용 방법을 확인하세요. 가입하다.
위는 mysql이 테이블에서 중복 행을 삭제하고 더 작은(또는 더 큰) ID의 레코드를 유지하는 방법입니다. 더 많은 관련 내용을 보려면 PHP에 주의하세요. 중국사이트(www.php.cn)!