이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 15984|회답: 0

[출처] MySQL [중복 제거 및 남기기] SQL 문이 아이디어 요약을 완성합니다

[링크 복사]
게시됨 2019. 3. 13. 오후 1:37:42 | | | |
며칠 전, 요구사항을 작업할 때 mysql에서 중복된 레코드를 정리해야 했는데, 그때는 코드 탐색으로 작성하는 것이 목표였는데, SQL 문으로 문제를 해결할 수 있을 거라 생각해서 너무 복잡하다고 생각했습니다. 정보를 확인하고 상사와 상의한 끝에 매우 편리한 SQL 문장을 생각해냈고, 여기서 이 SQL 문과 아이디어를 공유하려고 합니다.

필요 분석
데이터베이스에 중복 기록이 있다면, 그 중 하나를 삭제하고 유지하세요(중복 필드 결정 기준이 여러 필드일 경우도 포함)


용액

이런 필요를 마주할 때, 아마도 마음속에 어떤 생각이 있을 것입니다. 가장 빠르게 생각한 방법은 SQL 문으로 해결할 수 있다는 것이었지만, 복잡한 SQL 문장은 너무 얕아서 상사에게 도움을 청하고 싶었습니다.

도와줄 사람을 찾아보세요

因为这个需求有点着急,所以最开始想到的是,可以找这方面的同行来解决,然后分享这个问题给@赵七七同学,结果这货随便百度了一下,就甩给我一个从未用过的sql语句,让我自己尝试,心里万匹那啥啥啥奔腾而过...

오우 바이두

SQL 문장을 찾았습니다:


이 SQL 개념은 명확하며, 다음 세 단계가 있습니다:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 테이블 내 중복 레코드 쿼리 조건으로
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 두 번째 조건은 쿼리 테이블의 중복 레코드에서 ID의 가장 작은 값입니다
  • 마지막으로, 위의 두 조건에 따라 중복 레코드 중 가장 작은 ID를 제외한 나머지 중복 레코드를 삭제합니다


하지만 안타깝게도 이 문장을 실행할 때 오류가 발생하는데, 이는 대략 쿼리와 동시에 테이블을 업데이트할 수 없다는 의미입니다.


코드 해결

위의 SQL 문장을 바탕으로 코딩을 통해 두 단계로 같은 목표를 달성할 수 있을 것 같습니다:

  • 중복된 데이터셋을 먼저 제거합니다
  • 쿼리된 데이터셋을 바탕으로 남은 중복 데이터는 루프 방식으로 제거됩니다


아이디어가 떠올라서 빠르게 썼지만, 실행해보니 충격을 받았고 실제로 필요했어요116왼쪽과 오른쪽으로 이동한 다음, 사용할 수 있는 SQL 문장을 찾아서 코드와 실행 중인 결과를 붙여넣고 싶습니다:




완벽한 [중복 제거 및 남음] SQL

마침내 기술 그룹에서 완벽한 답변을 받았습니다. 이 SQL 문장을 보세요:


위의 SQL 문장을 자세히 보면 아이디어를 파악하는 것은 어렵지 않으며, 이해하기 위해 아마도 세 단계로 나뉘어 있을 것입니다:

  • (SELECT min(id) ID, user_id, 금전적 consume_time consum_record 그룹에서 user_id, 금전, consume_time HAVING count(*) > 1) t2 중복 레코드를 쿼리하여 각 중복 레코드의 최소 ID를 포함하는 컬렉션(임시 테이블 t2)을 형성합니다
  • consum_record.user_id = t2.user_id 및 consum_record.monetary = t2.monetary, consum_record.consume_time = t2.consume_time 중복 기준에 대한 관련 필드 연관
  • 조건에 따라 T2 ID보다 큰 레코드를 삭제합니다


이 문장을 보고 저는 너무 강력하다고 생각했습니다. 이렇게 간단한 SQL 문장이 복잡한 문제를 해결할 수 있고, 상황이 점점 높아지고 있습니다~
실행 속도도 매우 빠르고, 원래 코드 루프 실행은 약 116초가 걸리지만, 여기서는 0.3초면 충분해서 놀랍습니다~







이전의:javaEE 2018년 10월 영상 자료
다음:SQL은 업데이트된 데이터를 무작위로 수정합니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com