2011-09-26 3 views
3

사용자 이름 (사용자 이름) 및 ID (ID)가 구성원 테이블에 저장되도록 데이터베이스를 설정했습니다.SQL : 여러 열 일치 값

보고서를 기록하는 다른 테이블이 있는데 테이블 (fid)의 각 열,보고 한 사람 (rid) 및보고 한 사람 (id)은 모두 구성원 테이블의 사용자 ID와 일치합니다.

rid와 id 모두에 대한 사용자 이름을 가져올 수있는 쿼리는 어떻게 얻을 수 있습니까?

나의 현재 쿼리

SELECT selfreport.fid, selfreport.rid, 
     selfreport.id, members.username as username 
FROM members, selfreport 
WHERE members.id = selfreport.id 
ORDER BY fid 

하지만 이것은 단지 그들이보고 한 사람의 이름을 가져옵니다. 어떻게하면 둘 모두에 대해 사용자 이름을 가져올 수 있습니까?

+0

나는 당신이 원하는 것과 다소 혼동 스럽다. 원하는 출력의 예를 보여줄 수 있습니까? – Lamak

답변

2

당신은 두 번 members에 가입해야합니다 :

SELECT selfreport.fid, 
     selfreport.rid, 
     selfreport.id, 
     m1.username AS ReportToUsername, 
     m2.username AS ReporteeUsername 
FROM selfreport 
     INNER JOIN members m1 
     ON m1.id = selfreport.id 
     INNER JOIN members m2 
     ON m2.id = selfreport.rid 
ORDER BY fid 

당신이 암시 원래 쿼리에 참여하고 되었기 때문에, 나는 INNER JOIN이 잘 맞는 것으로 판단된다. 그러나 selfreport.id 또는 selfreport.rid에 null 값을 사용할 수 있다면 LEFT JOIN을 대신 사용해야합니다.

+0

'inner join members m2 on m1.id = selfreport.rid'는 'inner join members m2 on m2.id = selfreport.rid' 여야합니다. – Johan

+0

그게 오자였습니다. @Johan, 이제 고쳐졌습니다. –

3

회원 테이블에 두 번 가입해야합니다. 다음과 같이 시도하십시오.

+0

+ 1 개는 알기 쉽고 별명이 없습니다. – Johan

2

암시 적 SQL '89 조인을 사용하지 마십시오. 반 패턴입니다.
명시 적 조인 구문을 대신 사용하십시오. id 또는 rid가 선택 사항 인 경우

SELECT s.fid, s.rid, s.id, m1.username as username, m2.username as rusername 
FROM selfreport S 
INNER JOIN members m1 ON (m1.id = s.id) 
INNER JOIN members m2 ON (m2.id = s.rid) 
ORDER BY s.fid 

는 왼쪽 조인을 사용합니다.

SELECT 
    s.fid, s.rid, s.id 
    , COALESCE(m1.username, 'nobody') as username 
    , COALESCE(m2.username, 'nobody') as rusername 
FROM selfreport S 
LEFT JOIN members m1 ON (m1.id = s.id) 
LEFT JOIN members m2 ON (m2.id = s.rid) 
ORDER BY s.fid