2013-04-17 2 views
1

아무도 도와 드릴 수 있습니까?MySQL이 이상한 결과에 합류합니다

  • 일치

경기는 두 팀과 해당 경쟁과 게임의 상세 정보를 보유하고

  • 경쟁 :

    나는 다음과 같은 테이블이있다.

    나는 모든 게임에 대한 데이터베이스를 조회 할은/주어진 경쟁 비품, 나는 돌아가려면 :

    • 팀 이름
    • 팀 ID
    • 팀 경쟁

    내 검색어는 다음과 같습니다.

    SELECT 
        matches.match_id, 
        teamsh.team_name AS "homeTeam", 
        teamsa.team_name AS "awayTeam", 
        competition.competition_id, 
        competition.name 
    FROM 
        matches, teams teamsh, teams teamsa, competition 
    WHERE 
        matches.home_team_id = teamsh.team_id 
    AND matches.away_team_id = teamsa.team_id 
    AND matches.competition_id=2 
    

    어떤 이유로이 쿼리는 모든 조명기를 2 번 경쟁 업체에 올바르게 반환하지만 조명기의 행도 1 번 경쟁 업체로 반환합니다.

    AND matches.competition_id=2 
    

    내가 잘못 뭐하는 거지, 내가 데이터베이스를 확인하고 일치하는 각기구에 대해 올바르게 저장됩니다 나는 절을 가지고있는 이유를 이해할 수 없다.

    감사합니다.

  • 답변

    3

    (가 카티을 수행 그래서 가입).

    SELECT m.match_id, 
         h.team_name AS "homeTeam", 
         a.team_name AS "awayTeam", 
         c.competition_id, 
         c.name 
    FROM matches m 
    JOIN teams h ON m.home_team_id = h.team_id 
    JOIN teams a ON m.away_team_id = a.team_id 
    JOIN competition c ON m.competition_id = c.competition_id 
    WHERE m.competition_id=2 
    
    +0

    한 권리를주는 구문을 조인과 같이 -

    내가 명시를 사용하는 쿼리를 다시 작성 제안,하지만 구문을 가입 할 수 있습니다. –

    +0

    완벽하게 작동하는 Thnaks. 데카르트 결합은 제가 대학에 돌아온 지 10 년이 넘게 들어 본 적이없는 용어입니다. 다시 돌아가서이 내용을 읽어야합니다. –

    1

    경기와 일치하는 테이블 사이에 JOIN 조건을 잊어 버렸습니다.

    and matches.competition_id = competition.competition_id 
    

    - 귀하의 요청에의 끝에 : 추가하려고 - 당신은 명시 적으로 경쟁 테이블에 연결되지 않은

    WHERE 
        matches.home_team_id = teamsh.team_id 
        AND matches.away_team_id = teamsa.team_id 
        AND matches.competition_id = competition.competition_id 
        AND matches.competition_id=2 
    
    관련 문제