2012-10-01 4 views
1

MySQL에서 다음 쿼리를 작성하는 방법에 대해 혼란스러워합니다. 한 명의 공동 작업자를 감안할 때이 공동 작업자가 작업 한 각 항목에 참여한 모든 공동 작업자를 얻고 싶습니다.MySQL 쿼리가 여러 필드와 일치합니까?

여기 내 협력자 테이블의 : 대한

id collaborator_id item_id 
1  1    1 
2  2    1 
3  3    1 
4  4    2 
5  1    2 
6  2    3 

collaborator_id = 1, 쿼리가 반환 :

collaborator_id item_id 
     1    1 
     2    1 
     3    1 
     1    2 
     4    2 

1 ITEM_ID = 1, 3 = collaborator_ids로 근무했다 = 그래서 collaborator_id item_id = 2에서 자체적으로

이것은 매우 단순 해 보이지만 이러한 결과를 얻는 방법에 대해 두뇌가 멈추고 있습니다. 생각?

+0

를 사용하여 10? –

답변

5

이 쿼리는 ITEM_ID에 조인하고 협력자 자신 이외의 공유 항목에 주어진 협력자와 함께 일 모든 고유 협력자를 가져옵니다

SELECT distinct b.collaborator_id, b.item_id 
FROM collab_table a 
    JOIN collab_table b 
    on a.item_id = b.item_id 
WHERE a.collaborator_id = 1 
    and b.collaborator_id != 1 
+0

- @ davesnitty, 어떻게'item_id'도 돌려 주나요? –

+0

@timpeterson이 방금 쿼리를 편집했습니다. 공동 작업자가> 1 개 항목에 대해 공동 작업을한다고 가정 할 때 공동 작업자 당 여러 행이있을 수 있습니다. – davesnitty

+0

흠, 귀하의 질문이 옳지 않습니다. 그것은 이것을 반환합니다 : http://i.imgur.com/W9aOY.png –

2

은 무엇 당신이해야 할 것은 다시 테이블을 조인 그 자체로, 별칭 중 하나에 필터를 사용하여, 다른 결과 세트를 당기 :

select a.COLLABORATOR_ID, a.ITEM_ID 
from COLLABORATOR as a 
inner join COLLABORATOR as b on 
    a.ITEM_ID = b.ITEM_ID 
where b.COLLABORATOR_ID = 1 
3

가 사용할 수있는 subquery

또는 방법을 아래에 내 대답에 대한 JOIN

SELECT a.* 
FROM COLLABORATOR a 
     JOIN COLLABORATOR b 
      ON a.ITEM_ID = b.ITEM_ID 
WHERE b.COLLABORATOR_ID = 1 
ORDER BY item_ID, Collaborator_ID; 

SQLFiddle Demo

+1

- @ JohnWoo, 대단히 감사합니다! –

+0

- @ JohnWoo, 난 그냥 @ davesnitty의 코드 대 당신의 코드를 달렸고 그의 코드는 평균 0.6ms가 걸린 반면 2ms는 걸립니다. 엄청나게 많은 행 공동 작업자 테이블과 같이 Dave보다 코드가 빠르다는 것을 알고 있습니까? 나는 당신의 대답을 받아 들였습니다. 그것은 제게 더 의미가 있었지만, 분명히 가장 뛰어난 코드를 고르고 싶습니다. 생각? –

+1

가장 적합한 답변을 선택하십시오. D –

관련 문제