궁극적으로 중복 행을 삭제하고 행을 더 큰 숫자 데이터로 유지하려고합니다. 그래서 중복 데이터를 찾기 위해, 내가 사용하는 것이 : MySQL : 어떤 행이 더 큰 값을 갖는지 어떻게 알 수 있습니까?
SELECT * FROM tbl GROUP BY a HAVING COUNT(a)>1
field_a
에서 많은 수의이 행을 찾을 수 있습니까?
궁극적으로 중복 행을 삭제하고 행을 더 큰 숫자 데이터로 유지하려고합니다. 그래서 중복 데이터를 찾기 위해, 내가 사용하는 것이 : MySQL : 어떤 행이 더 큰 값을 갖는지 어떻게 알 수 있습니까?
SELECT * FROM tbl GROUP BY a HAVING COUNT(a)>1
field_a
에서 많은 수의이 행을 찾을 수 있습니까?
아마도 (경찰 아웃의 종류) : 이 레코드가 같은 최대 값을 가질 때
DELETE t
FROM t
EXCEPT (max-query-on-t)
또한 경우를 고려한다.
delete tbl from tbl,
(
select a, max(field_a) as max_a
from tbl
group by a
having count(a)>1
) as max_for_a
where tbl.a=max_for_a.a and tbl.field_a!=max_for_a.max_a;
당신이 각각에 대한 field_a에 대한 두 개 이상의 더 큰 가치가 있다면, 그것은 할 수없는 삭제하는 모든
이 문제를 해결하려면, 당신은
select a, count(*) from tbl group by a;
같은 다른 쿼리를 실행해야합니다
및 각
delete from tbl where a=? limit (total_count-1);
모두 하나 개의 쿼리에서이 작업을 수행하려면, 당신은 고유 키가 필요하고 저장해야 임시 테이블의 중간 결과 :
delete from tbl where tbl.id in (select result.id from (select tbl.id from tbl join (select max(a) as a from tbl) as maxa where tbl.a<>maxa.a) as result)
나는 이것을 두 개 또는 세 개의 별도의 쿼리로 분할하는 것이 좋습니다.
MAX() -> http://www.tizag.com/mysqlTutorial/mysqlmax.php – Christophe
을 시도해 봤는데 MAX를 분리하는 데 도움이되지만 MAX가 아닌 다른 모든 것은 삭제해야합니다. 어떻게해야합니까? – Strawberry
tbl WHERE MAX (a) <> 1 (여기서 <>는 의미가 아니므로 최대 값은 1이 아닙니다.) 그러나 먼저 해당 쿼리를 실행하기 전에 select를 사용하여 테스트하십시오. – Christophe