2013-01-07 3 views
2

나는 두 개의 테이블이 있습니다SQL에서이 쿼리를 작성하는 올바른 방법은 무엇입니까?

Names 
- id (int) 
- name (string) 

내가 특정 ID1이 모든 관계의 목록을 조회 할

Relationships 
- id1 (int) 
- id2 (int) 

을, 나는 결과 쿼리의 이름에서 이름을 포함합니다.

그래서, 결과는 네 개의 열

  • ID1
  • ID2
  • name_for_id1
  • name_for_id2

있을 것이 가능합니까? 이름 중 하나를 포함하도록 내부 조인을 할 수 있다는 것을 알고 있지만 두 이름을 모두 포함하는 방법을 모르겠습니다. 당신은 두 번 테이블에 가입 할 수 있습니다

select Relationships.id1, Relationships.id2, Names.name from Relationships 
inner join Names 
on Names.id1 = Relationships.id1 

답변

4

:

하나 개의 이름은 내가 좋아하는 일을 할 것입니다.

SELECT 
    r.id1, 
    r.id2, 
    n1.name, 
    n2.name 
FROM Relationships r 
INNER JOIN Names n1 ON r.id1 = n1.id 
INNER JOIN Names n2 ON r.id2 = n2.id 
+0

이것이 올바른 해결책인지 궁금합니다. id1과 id2에 대해 두 행을 반환 할까봐 걱정했습니다. 나는 나중에 그것에 가야 할 것이다. – bgoosman

1

당신은 두 번째 Names에 조인을 수행 할 수 있습니다. 테이블 별칭을 사용하여 조인을 지정할 수 있습니다.

select r.id1, r.id2, n1.name, n2.name 
from Relationships r 
inner join Names n1 
    on n1.id = r.id1 
inner join Names n2 
    on n2.id = r.id2 
+0

당신은 당신의 질의를 그것에 달린 채로 설명 할 수 있습니까? 조금 혼란스러워! – CodeLover

+1

@CodeLover 이렇게하면 'Relationships'의 모든 행을'r '이라는 이름을 사용하여 짧게 유지한다고합니다. 'r'에있는 각 행에 대해'id1'과'id'가 'Names'를 합쳐서'n1'을 호출합니다. 그런 다음 다시'r'과'Names'를 합쳐서'id2'와 매치하여'n2'를 호출합니다. 'name'은'n1'과'n2'로 별칭을 붙입니다. 그렇지 않으면 네임을 구별 할 방법이 없기 때문입니다.이 방법은'n1.name'과'n2.name'은 id1과 일치하는 이름을 명확하게 참조합니다 '및'id2'와 같습니다. 코드 n 설명에 대해 –

+0

'+ 1' – CodeLover

관련 문제