mysql 간단한 query 질문이에요
글쓴이: wandjina / 작성시간: 금, 2011/10/21 - 4:49오후
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 를 써야 할가요?
Forums:
select A.X , A.Y from table
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. 테스트는 해보지 않았어요..^^:
만약 데이터쌍마다 순서가 반대인 중복되는 쌍이 반드시
만약 데이터쌍마다 순서가 반대인 중복되는 쌍이 반드시 있다면... 즉, 테이블에 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`
돌려봤습니다
윗분들이 한 말대로 했더니 잘 안되네요 (더 많이 나온다는)
select * from test as A , test as B where (A.str2=B.str1 && A.str1=B.str2)
이렇게 하면 걸러져서 나오는데
이걸 delete from test 로 바꿔서 하면 되긴 할듯
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
테이블명이 TEST이면 SELECT
테이블명이 TEST이면
SELECT DISTINCT(CASE X > Y WHEN TRUE THEN CONCAT(Y, X) WHEN FALSE THEN CONCAT(X, Y) END) as pair from TEST;
해보세요
Signature :) - "여유를 갖고 행동하되 게을러지지 말자"
댓글 달기