가입

2012-09-18 5 views
1

나는 다음과 같은 테이블이 있습니다가입

+------+--------------+--------------+ 
| id | team_name | team_code | 
+------+--------------+--------------+ 
| 1 | Wales  | WAL   | 
| 2 | England  | ENG   | 
| 3 | New Zealand | NZL   | 
+------+--------------+--------------+ 

일치를

+------+-----------+-----------+ 
| id | team_a | team_b | 
+------+-----------+-----------+ 
| 1 | WAL  | ENG  | 
| 2 | ENG  | NZL  | 
| 3 | WAL  | NZL  | 
+------+-----------+-----------+ 

내가하는 일에 참여 방법을 알고 있지만, 나는 두 팀의 팀 이름을 얻기 위해 Matched.id으로 데이터베이스에 쿼리하는 방법에 대해 머리 숙여 질 수 없다. f Teams 데이터베이스에 있습니다. '잉글랜드' 내가 '웨일즈'를 선택해야합니다 1 : 나를 내가 Matches.id 경기 그래서

  • 으로 조회합니다
  • 팀 이름을 확인해야하는 각 경기

    • 더 나은 설명하게

    희망은 내가 충분히 명확하게 내 문제를 설명하지만, 내가하지 않은 경우 데이터베이스 구조 나 "off"로 될 것으로 보인다 더 많은 질문

  • 답변

    6

    을 물어 주시기 바랍니다했습니다.

    당신은 외국 키 Teams 테이블의 기본 키에 등 모두 team_ateam_b이 있어야합니다.

    그런 다음 ID에 가입 (두 번)하여 전체 이름을 얻을 수 있습니다.

    일치 :

    +------+-----------+-----------+ 
    | id | team_a | team_b | 
    +------+-----------+-----------+ 
    | 1 | 1  | 2   | 
    | 2 | 2  | 3   | 
    | 3 | 1  | 3   | 
    +------+-----------+-----------+ 
    
    SELECT T1.team_name, T2.team_name 
    FROM Matches M 
        INNER JOIN Teams T1 
        ON M.team_a = T1.id 
        INNER JOIN Teams T2 
        ON M.team_b = T2.id 
    WHERE M.id = 1 
    
    +1

    +1. Matches에'team_code'를 저장해서는 안되며, Team 테이블에 대해 'Foreign Key'가되어야합니다. –

    +1

    고유 한 코드를 키로 사용하는 데는 문제가 없습니다. – podiluska

    +0

    @podiluska - ID 필드가있는 이유는 무엇입니까? 그리고 두 개의'INT' 필드는 DB의'CHAR (3)'필드보다 훨씬 더 작습니다 (더 효율적인 메모리와 프로세싱이 현명합니다). – Oded

    1
    Select 
        matches.*, 
        teamA.team_name as TeamA_Name, 
        teamB.team_name as TeamB_Name 
    from matches 
        inner join teams teamA on matches.team_a = TeamA.team_code 
        inner join teams teamB on matches.team_b = TeamB.team_code 
    where 
        matches.id = 1 
    
    0
    select 
        m.id, 
        t1.team_name, 
        t2.team_name 
    from 
        Matches m 
        inner join Teams t1 on m.team_a = t1.team_code 
        inner join Teams t2 on m.team_b = t2.team_code