2015-01-29 2 views
0

예를 들어 2on2 바구니 게임에 대한 db를 취할 때처럼 mysql 개념을 하나 잡으려고합니다. 테이블은 다음과 같습니다쿼리 결과에서 두 쌍의 일치 항목을 일치 시키려고 시도합니다.

matches(**matchid**,teamAId,nationalityAOd,teamBId,nationalityBId) 
teams(**teamId**,playerAname,playerBname) 
nationalities(**natId**,natName) 

팀과 테이블이 같은 사건의 중복 제한을 위해 만들어진 국적 (미국 미국 미국 ....) 전체가 될 쿼리의 결과를 얻을 수있는 방법이 있나요

1 짐 제이크 미국 토니 조 같은 게임의 데이터, ITA

2 카를로스 가브리엘 SPA 단 크리스 ENG

......

는 matchId로 그룹화 되었습니까? 개념은 간단하지만, 내가

WHERE teamAId=teamId AND teamBId=teamId 

를 말한다면 그 팀은 스스로 대 연주하고있는 게임을 찾습니다 때문에 분명히 아무것도 얻을 수 없기 때문에 내가 시도하는 모든 쿼리는 좋지 않았다,하지만 난

을 말한다면
WHERE teamAId=teamId OR teamBId=teamId 

한 경기에 대해 각각 한 건당 두 건의 기록이 있으며, 내가 원하는 건 아닙니다. 미안합니다. 미리 알려 주시면 감사하겠습니다. ! 건배

+0

모든 게임에 대해 2 개의 레코드가있는 경우 조건의 일부를 건너 뛸 수 있음을 의미합니다. __WHERE teamAId = teamId__ 만 사용하십시오. –

+0

안녕하세요! 그 팀은 1 jim jake USA와 같은 팀 하나만 반환하고 다른 팀에게는 데이터가 없습니다! OR 조건으로 나는 "1 jim jake USA"를 얻었고 "1 tony joe ITA"를 두 행에 넣었지만 같은 기록에 넣고 싶습니다 ... –

답변

0

당신이 당신이 같은 행에 여러 행에서 데이터를 입력 할 수 있도록하고, 공통점 때문에 일치하는 ID로 필터링해야 INNER가

SELECT t1.PlayerAName, t1.PlayerBName, n1.natName, 
     t2.PlayerAName, t2.PlayerBName, n2.natName 
FROM matches m 
INNER JOIN teams t1 ON t1.teamID = m.teamAID 
INNER JOIN teams t2 ON t2.teamID = m.teamBID 
INNER JOIN nationalities n1 ON n1.natID = m.nationalityAID 
INNER JOIN nationalities n2 ON n2.natID = m.nationalityBID 
WHERE m.matchID = <match id here> 

가입 사용할 수 있습니다. match id를 where 절에 넣으면됩니다.

+0

좋아요! 다른 유형의 조인 , 나는 그들을 검토 할 것이다. 무리 감사! –

+0

@IoanNebun이 문제를 해결 했습니까? – djv

관련 문제