my sql 조회 표 의 중복 데이터 방법

10365 단어 mysql 중복 데이터

INSERT INTO hk_test(username, passwd) VALUES
('qmf1', 'qmf1'),('qmf2', 'qmf11')
 
delete from hk_test where username='qmf1' and passwd='qmf1'

MySQL 에서 조회 표 의 중복 데이터 기록:
중 복 된 원본 데이터 보기:

필드 1:username 필드 에 재 독 된 데 이 터 를 보 여 줍 니 다.

select username,count(*) as count from hk_test group by username having count>1;
 
SELECT username,count(username) as count FROM hk_test GROUP BY username HAVING count(username) >1 ORDER BY count DESC;

이런 방법 은 단지 이 필드 가 중복 대응 하 는 구체 적 인 개 수 를 통계 한 것 일 뿐이다
장면 2:username 필드 중복 기록 의 구체 적 인 지 시 를 보 여 줍 니 다.

select * from hk_test where username in (select username from hk_test group by username having count(username) > 1)
 
SELECT username,passwd FROM hk_test WHERE username in ( SELECT username FROM hk_test GROUP BY username HAVING count(username)>1)
 
       mysql     ,  mysql            。        ,      

해결 방법:

           
 
create table `tmptable` as ( 
SELECT `name` 
FROM `table` 
GROUP BY `name` HAVING count(`name`) >1 
); 
 
          
 
SELECT a.`id`, a.`name` 
FROM `table` a, `tmptable` t 
WHERE a.`name` = t.`name`; 
 
            。
 
  distinct   
 
SELECT distinct a.`id`, a.`name` 
FROM `table` a, `tmptable` t 
WHERE a.`name` = t.`name`;
장면 3:두 필드 가 모두 중복 되 는 기록 을 봅 니 다.예 를 들 어 username 과 passwd 두 필드 는 모두 중복 되 는 기록 이 있 습 니 다.

select * from hk_test a
where (a.username,a.passwd) in (select username,passwd from hk_test group by username,passwd having count(*) > 1)

장면 4:조회 표 의 여러 필드 가 동시에 중복 되 는 기록:

select username,passwd,count(*) from hk_test group by username,passwd having count(*) > 1

MySQL        
 
            
( )
1、           ,           (peopleId)   
select * 
from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId)>1)
 
2、           ,           (peopleId)   ,       
delete from people
where peopleId in (select peopleId 
from people group by peopleId having count(peopleId)>1)
and min(id) not 
in (select id from people group by peopleId having count(peopleId)>1)
 
3、           (    )
select * from vitae a
where (a.peopleId,a.seq) in 
(select peopleId,seq from vitae group by peopleId,seq having count(*)>1)
 
4、           (    ),   rowid     
delete from vitae a
where 
(a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq 
having count(*) > 1)
and rowid not in (select min(rowid) from vitae group 
by peopleId,seq having count(*)>1)
 
5、           (    ),   rowid     
select * from vitae a
where 
(a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq 
having count(*) > 1)
and rowid not in (select min(rowid) from vitae group 
by peopleId,seq having count(*)>1)
 
( )
   
 A        “name”,         “name”       ,                   ,“name”       ;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
             :
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
 
( )
   
declare @max integer,@id integer
declare cur_rows cursor local for select    ,count(*) from    group by     
having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from    where     = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

SELECT * from tab1 where CompanyName in( SELECT companyname from tab1 GROUP BY CompanyName HAVING COUNT(*)>1);
-- 129.433ms 
 
SELECT * from tab1 INNER join ( SELECT companyname from tab1 GROUP BY CompanyName HAVING COUNT(*)>1) as tab2 USING(CompanyName);
-- 0.482ms
 
   
 
             ,         ,            ,             ,  Name    ,                  。
 
  1、       ,      ,  
 
select distinct * from tableName
 
                。
 
               (      1 ),         
 
select distinct * into #Tmp from tableName
 
drop table tableName
 
select * into tableName from #Tmp
 
drop table #Tmp
 
                    ,           。
 
2、                       ,      
 
           Name,Address,               
 
select identity(int,1,1) as autoID, * into #Tmp from tableName
 
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
 
select * from #Tmp where autoID in(select autoID from #tmp2)
 
    select    Name,Address       (     autoID  ,        select       )
 
( )    
 
select * from tablename where id in (
 
select id from tablename group by id having count(id) > 1)

     
 
1、           ,           (mail_id)   
 
       
 SELECT * FROM table WHERE mail_id IN (SELECT mail_id FROM table GROUP BY mail_id HAVING COUNT(mail_id) > 1);
 
 
2、           ,           (mail_id)   ,   rowid     
 
       
DELETE FROM table WHERE mail_id IN (SELECT mail_id FROM table GROUP BY mail_id HAVING COUNT(mail_id) > 1) AND rowid NOT IN (SELECT MIN(rowid) FROM table GROUP BY mail_id HAVING COUNT(mail_id )>1);
 
 
3、           (    )
 
       
SELECT * FROM table WHERE (mail_id,phone) IN (SELECT mail_id,phone FROM table GROUP BY mail_id,phone HAVING COUNT(*) > 1);
 
 
4、           (    ),   rowid     
 
       
 DELETE FROM table WHERE (mail_id,phone) IN (SELECT mail_id,phone FROM table GROUP BY mail_id,phone HAVING COU(www.jb51.net)NT(*) > 1) AND rowid NOT IN (SELECT MIN(rowid) FROM table GROUP BY mail_id,phone HAVING COUNT(*)>1);
 
 
5、           (    ),   rowid     
 
       
SELECT * FROM table WHERE (a.mail_id,a.phone) IN (SELECT mail_id,phone FROM table GROUP BY mail_id,phone HAVING COUNT(*) > 1) AND rowid NOT IN (SELECT MIN(rowid) FROM table GROUP BY mail_id,phone HAVING COUNT(*)>1);
 
 
    
 
declare @max integer,@id integer
 
declare cur_rows cursor local for select    ,count(*) from    group by     having count(*) >; 1
 
open cur_rows
 
fetch cur_rows into @id,@max
 
while @@fetch_status=0
 
begin
 
select @max = @max -1
 
set rowcount @max
 
delete from    where     = @id
 
fetch cur_rows into @id,@max
 
end
 
close cur_rows
 
set rowcount 0
 
 
 
( )    
 
1、           ,  (question_title)     
 
       
select * from questions where question_title in (select question_title from people group by question_title having count(question_title) > 1)
 
 
2、           ,  (question_title)     ,       
 
       
delete from questions
where peopleId in (select peopleId from people group by peopleId having count(question_title) > 1)
and min(id) not in (select question_id from questions group by question_title having count(question_title)>1) 
 
( )    
 
           (    ),   rowid     
 
       
DELETE FROM questions WHERE (questions_title,questions_scope) IN (SELECT questions_title,questions_scope FROM que(www.jb51.net)stions GROUP BY questions_title,questions_scope HAVING COUNT(*) > 1) AND question_id NOT IN (SELECT MIN(question_id) FROM questions GROUP BY questions_scope,questions_title HAVING COUNT(*)>1)
 
 
         ,         ,         。
 
       
CREATE TABLE tmp AS SELECT question_id FROM questions WHERE (questions_title,questions_scope) IN (SELECT questions_title,questions_scope FROM questions GROUP BY questions_title,questions_scope HAVING COUNT(*) > 1) AND question_id NOT IN (SELECT MIN(question_id) FROM questions GROUP BY questions_scope,questions_title HAVING COUNT(*)>1);
 
DELETE FROM questions WHERE question_id IN (SELECT question_id FROM tmp);
 
DROP TABLE tmp;
my sql 데이터 시트 에서 중복 기록 찾기
my sql 데이터베이스 에 있 는 데이터 가 점점 많아 지고 있 습 니 다.물론 중복 되 는 데 이 터 를 제외 할 수 없습니다.데 이 터 를 유지 할 때 갑자기 불필요 한 데 이 터 를 삭제 하고 가치 있 는 데 이 터 를 남 겨 야 한 다 는 생각 이 들 었 습 니 다.
다음 sql 문 구 는 표 의 모든 중복 기록 을 찾 을 수 있 습 니 다.
select user_name,count(*) as count from user_table group by user_name having count>1;
매개 변수 설명:
user_name 은 찾 을 중복 필드 입 니 다.
count 는 1 보다 큰 것 을 판단 하 는 데 쓰 이 는 것 이 중복 이다.
user_table 에서 찾 을 시계 이름 입 니 다.
그룹
필터
파 라 메 터 를 자신의 데이터 시트 의 해당 필드 파라미터 로 바 꾸 면 Phpmyadmin 이나 Navicat 에서 먼저 실행 할 수 있 습 니 다.어떤 데이터 가 중복 되 었 는 지 확인 한 다음 에 데이터 베이스 에서 삭제 할 수도 있 고 SQL 문 구 를 배경 에서 뉴스 를 읽 는 페이지 에 직접 넣 어서 읽 을 수도 있 습 니 다.중복 데 이 터 를 조회 하 는 목록 으로 보완 하고 중복 되 는 것 이 있 으 면 직접 삭제 할 수 있 습 니 다.
효 과 는 다음 과 같 습 니 다:

단점:이런 방법의 단점 은 바로 당신 의 데이터 베이스 안의 데 이 터 량 이 많 을 때 효율 이 매우 낮 다 는 것 입 니 다.저 는 Navicat 테스트 를 사 용 했 습 니 다.데 이 터 량 이 많 지 않 고 효율 이 높 습 니 다.물론 사이트 에는 다른 조회 데이터 가 중복 되 는 SQL 문구 도 있 습 니 다.하 나 를 보면 열 을 알 수 있 습 니 다.여러분 들 은 연 구 를 잘 해서 자신의 사이트 에 맞 는 조회 문 구 를 찾 으 세 요.

좋은 웹페이지 즐겨찾기