2013-07-12 3 views
0

나는 SQL에는 프로 해요 그러나 나는 다음과 같은 SELECT와 함께 주위를 연주 해요 :: 여러 필드는 같은 이름

SELECT 
     certificate.id, 
     certificate.date_created, 
     certificate.date_approved, 
     certificate.notes, 
     certificate.id_user_student, 
     certificate.id_user_exm, 
     certificate.id_user_eval, 

     user.name AS student_name, 
     user.name AS exm_name, 
     user.name AS eval_name 

     FROM certificate 
     LEFT JOIN 
      user ON certificate.id_user_student = user.id AND 
        certificate.id_user_exm = user.id AND 
        certificate.id_user_eval = user.id 

이 나의 ideia가에서 name 열을 할 수있다 테이블 userJOIN 모든 사용자 ID 필드에 대해 certificate 테이블에 배치하십시오. 테이블 certificateid_user_student, id_user_exm, id_user_eval 테이블 user에 사용자 ID를 사용할 수 포함 나는 결과 집합에 자신의 이름을 원하는에서

.

현재 쿼리는 첫 번째 결과에만 올바르게 작동합니다. 아무도 내가 어떻게이 문제를 해결할 수 있다고 말할 수 있습니까?

감사합니다.

+0

INNER JOIN? 또한 왜 ID가 세 id_user_student, id_user_exm, id_user_eval 모두와 일치해야하는지 확신 할 수 없습니다. ON 조건이 하나의 외래 키와 하나의 기본 키를 일치 시키도록 인증서 테이블을 정규화하는 것을 고려하십시오 .... –

+1

@ A.O. 나는 OP가 세 개의 외래 키 열 각각에 대해 별도의 이름 조회를 원한다고 생각합니다. – spencer7593

+0

@ spencer7593 당신이 맞습니다. 왜냐하면 모든 학생, emx 및 evals는 'user' 테이블에있는 사람들이며 모두 인증 프로세스에 참여하고 있기 때문입니다. ;) – TCB13

답변

2

id를 기반으로하는 이름의 "조회"마다 3 회의 조인 작업이 필요합니다. 사용자 테이블에 대한 참조가 세 개 필요합니다 (예 :

SELECT c.id 
    , c.date_created 
    , c.date_approved 
    , c.notes 
    , c.id_user_student 
    , c.id_user_exm 
    , c.id_user_eval 
    , s.name AS student_name 
    , e.name AS exm_name 
    , v.name AS eval_name 
    FROM certificate c 
    LEFT 
    JOIN user s ON s.id = c.id_user_student 
    LEFT 
    JOIN user e ON e.id = c.id_user_exm 
    LEFT 
    JOIN user v ON v.id = c.id_user_eval 
+0

고마워요! 그것은 아주 잘 작동했습니다! – TCB13