2014-03-03 2 views
1

많은 사용자가 유물 집합에 주석을 첨부 한 데이터 세트가 있으며 사용자가 직접/간접적으로 상호 작용 한 다른 모든 사용자를 알고 싶습니다. 나는 또한 기여한 아티팩트에 기여한 각 사용자와 다른 모든 사용자를 보여주는 쿼리를 작성하려고합니다. 내 데이터는이 경우 사용자 A에 따라서이개체에서 사용자 간의 상호 작용 추적

+----------+------+ 
| Artifact | User | 
+----------+------+ 
| 1  | a | 
| 1  | b | 
| 1  | c | 
| 1  | d | 
| 2  | a | 
| 2  | m | 
+----------+------+ 

같은이 B, C, D & m와 상호 작용 보인다; b는 a와 상호 작용했다. c & d; 그리고 m은 중복 (그래서에만 고유 한 값)을 표시하지 것이다

이상적와 상호 작용하지만, 필요하다면 나는 그 통해 잡초 수

당신은 GROUP_CONCAT 기능을 사용할 수 있습니다

답변

2

:

SELECT 
    t1.User, GROUP_CONCAT(DISTINCT t2.User ORDER BY t2.User) 
FROM 
    test t1 
    JOIN test t2 ON (t1.Artifact = t2.Artifact AND t1.User != t2.User) 
GROUP BY t1.User 

Here's an example

+0

좋아,이게 대부분 제가 고마워하는 일입니다. 하지만 실제로는 너무 많은 겹침이있어 모든 관계를 보여주지 못합니다. 중복을 제거 할 수있는 방법이 있습니다 (예제 코드 http://tqlfiddle.com/#!2/14b83/1). 여기서 m & b는 중복 됨 – Mike

+1

업데이트 된 쿼리는 http://sqlfiddle.com/#!2/14b83/2입니다. 또한 답변을 업데이트했습니다 (추가 : GROUP_CONCAT (DISTINCT ...) –

관련 문제