2010-07-06 5 views
0

하나 개의 테이블에 여러 번 참여 모든 게임과 플레이어의 성별을 선택하고 싶습니다. null playerIds를 어떻게 넘을 수 있습니까? this explanation에서나는 두 개의 테이블이 널 (null) FKS 상황에서

, 나는 답이있을 거라고 생각합니다 :

SELECT Games.id, p1.gender, p2.gender 
FROM Games JOIN Players p1 on player1Id = p1.id 
JOIN Players p2 on player2Id = p2.id 

그러나,이 널 (null)로 player1Id 또는 player2Id 중 하나가 있습니다 어떤 게임을 반환하지 않습니다. 가능한 경우에 연결된 플레이어가있는 모든 게임을 에 표시 할 수있는 방법이 있습니까?

감사합니다.

+0

'Games.player1Id'이 될 수'NULL'과와'Games.player2Id'이 될 수'NULL'입니까? 키가 없어서 디자인상의 결함 인 것 같습니다. 즉 테이블이 아닙니다. 솔로 플레이어 게임과 두 명의 플레이어 게임을 모델링하는 다른 방법을 찾아야한다고 생각합니다. – onedaywhen

+0

@onedaywhen 이것은 실제 데이터베이스가 아닙니다. 제가 질문을 할 수 있도록 예제 테이블을 만들었습니다. 전에 내가이 문제를 겪었 기 때문에 단지 궁금하다. – mphair

+0

당신은 SQL DML ('쿼리')을 작성하는 것이 얼마나 자주 SQL DDL (테이블 디자인)의 결과인지 놀랄 것입니다. SQL DDL에 사용 된 데이터 요소 이름은 설계자의 의도에 대해 많은 것을 보여줍니다. 그래서 우리에게 기회를주고 실제 스키마를 게시하십시오 :) 그렇지 않으면 스키마가 좋을 수도 있고 오히려 그것이 리콜됩니다;) – onedaywhen

답변

5
당신은 LEFT를 사용할 필요가

는 가입 : 여기

SELECT g.id, p1.gender, p2.gender 
    FROM Games g 
LEFT JOIN Players p1 ON p1.id = g.player1Id 
LEFT JOIN Players p2 on p2.id = g.player2Id 

really good link that visual demonstrates the different JOINs

+0

감사와 훌륭한 기사. 나가 google에 남긴 유일한 것은 외부가 디폴트다는 것을 것을이 발견하기 위하여 LEFT JOIN와 LEFT OUTER/INNER JOIN의 차이이었다. 다시 한번 감사드립니다. – mphair

+0

@mphair : 예, "OUTER"부분이 자세한 내용임을 알게되었습니다. 이 데이터베이스는 어떤 데이터베이스입니까? –

+0

특별히 질문에 맞는 테이블을 만들지 않았습니다. 특별한 호기심 기반 데이터베이스라고 생각합니다. = P – mphair

관련 문제