2009-12-28 9 views
1

저는 MySQL에 처음 접했고 쿼리를 통해 데이터를 줄이는 데 아주 좋습니다. 그러나 중복 레코드가 포함 된 레코드를 원한다면 두 레코드를 모두 얻는 것이 어려워 보입니다.동일성을 가진 MySQL 쿼리와 모든 결과를 만족하십시오.

같은 표는 같습니다 (!) 나는 중복 값을 모두 기록 할

ID Value more columns.. 
1  4 
1  4 
1  5 
2  4 
3  5 
3  5 
4  4 
4  5 

내가 그들을 필요

ID Value more columns.. 
1 4 
1 4 
3 5 
3 5 

처럼, 모두 ... 다른 열에서 정보가로 왜 값이 같은지.

고맙습니다.

+1

을 - 특정 테이블의 스키마/SQL 쿼리는 사람들이 당신을 제공 할 것입니다 구체적 제안. –

답변

3

이 쿼리는 idvalue 동일한 값을 적어도 하나 개의 다른 기록이 모든 레코드 선택 : 아이디어로

SELECT * 
FROM mytable mi 
WHERE EXISTS 
     (
     SELECT NULL 
     FROM mytable mo 
     WHERE mo.id = mi.id 
       AND mo.value = mi.value 
     LIMIT 1, 1 
     ) 
+0

이 쿼리는 천재적입니다. 그걸 사용하려면 시간이 좀 걸렸어. 그러나 mi가 tmp를 통해 실행되도록 임시 테이블을 만드는 것이 좋습니다. 한 가지 예 : 4400 행의 쿼리를 248 초에서 49 초로 줄였습니다 ... 두 번째 tmp가 저에게 효과적이지 않았습니다. 어쨌든 고마워! – jorgusch

1
select * 
    from mytable 
where (id, value) 
    in (select * from (select id 
      , value 
      from mytable 
     group 
      by id 
      , value 
     having count(*) > 1)) 
+0

이것은 나에게도 효과가있다. 고마워. 그러나, 그것은 위의 것보다 느렸다. – jorgusch

+0

mysql의 서브 쿼리 materialization 버그를 해결하기 위해 약간의 변경을했습니다. 다시 시도해보고 성능이 더 좋은지 확인하십시오. – longneck

관련 문제