>  기사  >  데이터 베이스  >  mysql 테이블에서 중복 행을 삭제하고 더 작은(또는 더 큰) ID로 레코드를 유지하는 방법

mysql 테이블에서 중복 행을 삭제하고 더 작은(또는 더 큰) ID로 레코드를 유지하는 방법

黄舟
黄舟원래의
2017-02-27 13:09:271202검색

실제 데이터베이스에 입력하는 과정에서 데이터의 양이 상대적으로 많으면 어떤 이유로 인해 여러 개의 중복 레코드가 입력될 수밖에 없습니다. 그렇다면 어떻게 중복 행을 삭제하고 더 큰 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)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.