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 문구 도 있 습 니 다.하 나 를 보면 열 을 알 수 있 습 니 다.여러분 들 은 연 구 를 잘 해서 자신의 사이트 에 맞 는 조회 문 구 를 찾 으 세 요.