2012-11-19 3 views
0
team1 
+----------+----------+ 
| id1  | name  | 
+----------+----------+ 
| 1  | a  | 
| 2  | b  | 
| 3  | c  | 
+----------+----------+ 

team2 
+----------+----------+ 
| id2  | name  | 
+----------+----------+ 
| 1  | d  | 
| 2  | e  | 
| 3  | f  | 
+----------+----------+ 

play 
+----------+----------+----------+ 
| id3  | id1  | id2  | 
+----------+----------+----------+ 
| 1  | 1  | 1  | 
| 2  | 1  | 3  | 
| 3  | 2  | 1  | 
| 4  | 3  | 2  | 
| 5  | 2  | 3  | 
+----------+----------+----------+ 

나는 SQL을 처음 사용했습니다. 나는 계산 조건을 설정하는 방법에 고심하고있다. 위의 표에서 팀 2의 플레이어와 함께 플레이 한 team1의 플레이어를 찾고 싶습니다. 적어도 두 번 이상 플레이했거나 플레이 할 것입니다. 기본적으로 id2의 값이 두 번 이상 표시되면 id2에서 재생되는 id1의 값이 결과의 일부 여야합니다. 그냥 테이블을보고, 나는 그것이 중복되지 않은 경우 id1 = 1 및 id1 = 2를 반환하고 싶습니다. 나는 이것에 대해 어떻게 생각하는지에 대해 머리를 감쌀 수 없다.두 번 등장한 다른 플레이어와 함께 플레이 한 플레이어 찾기

+1

. 틀림없이 플레이어 테이블이 하나만 있어야하고 id1과 id2가 모두 하나의 테이블을 참조해야합니다. 당신의 디자인으로, 플레이어는 다른 테이블의 누군가와 만 플레이 할 수 있습니다. – Bohemian

+0

테이블을 편집하여 팀으로 만들었습니다. 잘하면 그게 좀 더 명확하게 ... 나는 아마도 더 좋은 예를 생각해 낼 수 있었을 것이다 ... – user1834372

+0

그러면 'team_id'가 플레이어의 열로 추가되어야한다. 하나의 "플레이어"테이블 만 있어야합니다. 그렇지 않으면 문제로 향합니다. – Bohemian

답변

0

보십시오 :

이상한 (나쁜) 데이터 구조입니다
select distinct p1.id1 
from play p1 
join (select id2 
     from play 
     group by id2 
     having count(*) > 1) p2 
on p1.id2 = p2.id2 
관련 문제