mysql 간단한 query 질문이에요

wandjina의 이미지

X Y
a b
a c
a d
b a
b e
b f
..
..

이런 테이블이 있을때,

X와 Y의 관계에서
a-b나 b-a나 사실 같은 데이터라 둘 중 하나는 빼고 싶거든요.
이런게 상당히 많이 있습니다. (약 5000 줄.. )

즉 a-c와 c-a,
e-z와 z-e...

뭐 이런식의 중복이죠..

둘중 하나만 빼고 싶구요,

실제 데이터는 X와 Y가 유전자 이름입니다.

biology에 몸담고 있어서 DB는 어렵네요 ...ㅠㅠ

어떤 query 를 써야 할가요?

익명 사용자의 이미지

select A.X , A.Y from table AS A inner join ( SELECT X , Y FROM table ) AS B
where A.X <> B.Y AND A.Y <> B.X

를 사용하면.. 중복제거된 리스트를 얻을 수 있을듯해요.

ps. 테스트는 해보지 않았어요..^^:

wariua의 이미지

만약 데이터쌍마다 순서가 반대인 중복되는 쌍이 반드시 있다면... 즉, 테이블에 a-c가 들어있으면 c-a도 들어있고 그 반대도 성립한다면...

SELECT * FROM table WHERE X <= Y

정도로 가능합니다.

아쉽게도 그 가정이 성립하지 않는다면...

SELECT X, Y FROM table WHERE X <= Y UNION SELECT Y, X FROM table WHERE X >= Y

정도로 가능합니다.

ps. sqlite에서만 테스트 해보고 mysql에서는 테스트 해보지 않았습니다. 아휴~ mysql이라니, 무서워라~ ^^;;

$PWD `date`

jos77의 이미지

윗분들이 한 말대로 했더니 잘 안되네요 (더 많이 나온다는)

select * from test as A , test as B where (A.str2=B.str1 && A.str1=B.str2)

이렇게 하면 걸러져서 나오는데

이걸 delete from test 로 바꿔서 하면 되긴 할듯

-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr

yhsuk의 이미지

테이블명이 TEST이면

SELECT DISTINCT(CASE X > Y WHEN TRUE THEN CONCAT(Y, X) WHEN FALSE THEN CONCAT(X, Y) END) as pair from TEST;
해보세요

Signature :) - "여유를 갖고 행동하되 게을러지지 말자"