2012-09-22 1 views
2

내가 보이는 MySQL의 테이블을 건너 MySQL의 테이블에서 중복 데이터를 제거 같은 :
(UNIQUE_ID, uid_data1, uid_data2, sorting_data1, sorting_data2)두 개의 열

이 테이블은 양방향 관계가 weren 히 도구에 사용된다 지금까지는 지원되지 않으므로 표에 다음과 같은 데이터가 포함되어 있습니다 (위에 나열된 필드 순서) :
(1, 1212, 2034, 1)
(2, 2034, 1212, 1)
(3, 4567, 9876, 1,0)
(4, 9876, 4567, 0, 1)

표는 또한 "단일 관한"관계 (5가 5566은, 8899, 1, 9)
=> 더 행 (?, 8899, 5566, 9, 1)

존재하지
익스플로러 포함 이 도구는 이제 양방향/대칭 관계를 지원하므로 mysql 테이블에서 중복 데이터를 제거하고 싶습니다. 그러나이를 수행 할 적절한 쿼리를 찾는 데 어려움이 있습니다.
위의 예제에서 데이터는 이미 1과 3 행에 저장되어 있으므로 uids 2와 4가있는 행을 삭제하고 싶습니다.

먼저 SELECT 문을 설정하려고 시도했지만, 어떤 항목이 삭제됩니다.
내가

SELECT x.uid, x.uid_link1, x.uid_link2, y.uid_link1 as 'uid_link2', y.uid_link2 as 'uid_link1' 
FROM tx_sdfilmbase_hilfstab x 
INNER JOIN tx_sdfilmbase_hilfstab y ON x.uid_link1=y.uid_link2 AND x.uid_link2=y.uid_link1 
WHERE ??? 
ORDER BY x.uid_link1, x.uid_link2 

그러나 나는 레코드 만의 "절반 부분"를 선택 MySQL은 말할 필요 시점에 붙어 해요 가입하기 - 쿼리 생각했다.
하나를 이 작업을 수행하는 방법에 대한 제안?

추신 테이블이 수천 행 ;-) 그래서

+0

이것은 구문 상 정확하지는 않지만'delete from tx_sdfilmbase_hilfstab where uid_link2 in (tx_sdfilmbase_hilfstab에서 uid_link1 선택)'이 작동 할 수도 있습니다 ... –

+0

하지만 그럴 수도 있습니다. (2233, 1122),> (5566, 1122) => 여기서 (2233, 1122)와 (5566, 1122)는 모두 삭제되지만, 1122)은 (5566, 1122)에 이중 입력이 없으므로 삭제해야합니다. – Stefan

답변

4
Select t.* from MyTable t 
inner join MyTable tt 
On t.uid_data1 = tt.uid_data2 and t.uid_data2 = tt.uid_data1 and t.unique_ID > tt.unique_ID 

는 (귀하의 예제의 레코드 2, 4)

쌍의 "초"부분을 발견해야

Delete t from MyTable t 
inner join MyTable tt 
On t.uid_data1 = tt.uid_data2 and t.uid_data2 = tt.uid_data1 and t.unique_ID > tt.unique_ID 

작업을 수행해야합니다

+0

이것은 WHERE 절을 갖는 것보다 낫습니다. 고마워! – Stefan

+0

이것은 한두 번 나 자신을 풀어야했던 문제입니다. :(:( –

+0

Hm ... SELECT 문이 완벽하게 작동하지만 DELETE가 작동하지 않는 것 같습니다. 구문 오류가 있다고합니다 ... 그러나 설명서에 따르면 JOIN은 DELETE를 허용해야합니다 - 설교 – Stefan

1

들어 있으므로 테이블에서 수동으로 각 하나의 레코드를 삭제하면, 옵션이 아닌, 하나 개의 행이 될 것입니다

uid_link1 = 1, uid_link2 = 9

uid_link1 = 9 다른 하나 uid_link2 = 1

맞습니까?

무엇

.. x.uid_link1 < y.uid_link1 ...

하지만이 uid_link1로 = uid_link2

편집을 중복 제거되지 않습니다

에 대한 : 또는 당신이 할 수있는 사용 ... 어디 x.unique_id < y.내가 바로 그때 그것을 가지고있는 경우 UNIQUE_ID

+0

니스, "WHERE x.unique_id Stefan