2012-11-22 5 views
1

나는 다음과 같은 테이블을 가지고 있습니다 :MySQL - 상호 행 선택

user_id | wants_user_id | 상태

그리고 상호가있는 행을 선택하고 값이 "예"또는 "어쩌면"인 state 열을 갖고 싶습니다.

데이터 예 :

행 1 : 1 | 2 | "yes"
행 2 : 2 | 1 | "maybe"
행 3 : 3 | 2 | "yes"

이때 I는 1 행 2 및 wants_user_id에 (두 번째 열)을 선택하고자 테이블 users의 사용자 데이터에 참여하고 싶습니다만 SQL 명령을 이해할 수 없습니다.

도움 주셔서 감사합니다.

답변

0

용도 (I는 "상호 행"여기에 서로를 원하는 사용자를 의미 있으리라 믿고있어) 행을 일치 얻기 위해 자기 조인 :이 경우

SELECT * 
FROM myTable a 
INNER JOIN myTable b ON a.user_id = b.wants_user_id 
    AND b.user_id = a.wants_user_id 
INNER JOIN users ua ON a.user_id = ua.id 
INNER JOIN users ub ON b.user_id = ub.id 
WHERE a.state IN ('yes', 'maybe') 
AND b.state IN ('yes', 'maybe') 

을, 당신은 두 개의 "복제"행을 얻을 것이다 하나는 1 < -> 2이고 다른 하나는 2 < -> 1입니다. 이를 제거하기 위해 AND b.user_id > a.user_id을 조인 조건에 추가 할 수 있습니다. 이것은 각 쌍의 한 행만 선택합니다.

+0

예, 이것이 내가 찾고 있었던 것입니다. 감사합니다! – kudlajz

관련 문제