2013-05-20 1 views
0

일부 행의 경우 대부분의 열이 하나의 열을 제외하고 복제되는 테이블이 있습니다. 어떻게 그 행을 선택하고 몇 가지 요구 사항에 따라 하나만 유지 궁금하네요? 여기에 내가 가진 표는 다음과 같습니다mysql에서 다른 열만있는 행을 제거하는 방법은 무엇입니까?

+------+------+--------+---------+-----------+ 
| a_id | b_id | a_name | b_name | matching | 
+------+------+--------+---------+-----------+ 
| 001 | 123 | AAA | BBB | ID  | 
+------+------+--------+---------+-----------+ 
| 002 | 456 | CCC | CCC | ID  | 
+------+------+--------+---------+-----------+ 
| 002 | 456 | CCC | CCC | Name | 
+------+------+--------+---------+-----------+ 

요구 사항은 일치하는 ID와 일치하는 이름을 모두 거기에 같은 A_ID를 들어, 내가 이름을 일치하는 행을 제거 할 것입니다. 일치하는 ID는 다른 테이블에 의해 결정되므로 걱정할 필요가 없습니다. 위의 표에 대한 원하는 출력은 다음과 같습니다.

+------+------+--------+---------+-----------+ 
| a_id | b_id | a_name | b_name | matching | 
+------+------+--------+---------+-----------+ 
| 001 | 123 | AAA | BBB | ID  | 
+------+------+--------+---------+-----------+ 
| 002 | 456 | CCC | CCC | ID  | 
+------+------+--------+---------+-----------+ 

저는 MySql에 익숙하지 않습니다. if 문을 사용하여 동일한 a_id를 먼저 사용하여 행을 필터링 한 다음 일치하는 열을 비교하는 방법에 대해 생각하고 있습니다. 하지만 쿼리에서이 작업을 수행하는 방법을 잘 모르겠습니다.이 작업을 수행 할 수있는 더 좋은 방법이 있는지 궁금합니다. 입력 해 주셔서 감사드립니다. 미리 감사드립니다!

+0

'matching' 열만 변경해야합니까? – hjpotter92

+0

아니요 두 테이블을 조사하고 수학 ID 및 일치하는 이름을 찾는 쿼리를 실행하여이 테이블을 얻습니다. 그 중 일부가 겹치는 문제가 있습니다. 일치하는 ID가있는 항목의 이름이 일치합니다. – pew007

+0

스키마를 제공해 주시겠습니까? – Achrome

답변

0

누군가가 나를 도왔던 유사한 문제가 있었기 때문에 찌르다. 나는 그것을 과도하게 복잡하게 할지도 모른다 :

나는 a_id에 의한 단순한 그룹의 문제는 그룹핑 된 2 개의 중복을 구별 할 수 없다고 생각한다.

방금 ​​얻었습니다.

+------+------+--------+---------+-----------+ 
| a_id | b_id | a_name | b_name | matching | 
+------+------+--------+---------+-----------+ 
| 002 | 456 | CCC | CCC | ID  | 
+------+------+--------+---------+-----------+ 

삭제 하시겠습니까? "일치하는"열에 '이름'이있는 dups를 원하십니까?

아마도 dups를 group-by a_id와 분리 한 다음 결과를 더 격리시켜 'name'값이 일치하는 필드를 선택하십시오.

아마도 이와 비슷한가요?

SELECT * from MyTable alias1 
inner join (select a_id from MyTable where matching = 'name') alias2 
on alias1.a_id = alias2.a_id 
where matching = 'name' 

"matching = 'name'"을 생략하면 확인해야 할 모든 중복 목록을 얻어야합니다.
전체 설명은 다음을 반환해야합니다.

+------+------+--------+---------+-----------+ 
| a_id | b_id | a_name | b_name | matching | 
+------+------+--------+---------+-----------+ 
| 002 | 456 | CCC | CCC | name | 
+------+------+--------+---------+-----------+ 

결과가 목표와 일치하면 삭제할 문장을 변경할 수 있습니다.

추가됨 fiddle