2012-11-18 2 views
3

MS SQL Server 데이터베이스. (하지 권리 장소에서 기본 키 미안) 내가 TEACHER.ID를 참조하는 외래 키 "최고"를,이 교사 테이블에서SQL에서 외래 키 값을 가져옵니다. 외래 키는 동일한 테이블을 참조합니다

enter image description here

(같은 테이블 :

나는이 간단한 구조를 가지고). SELECT 쿼리를 수행하는 동안 정수 (Teacher.ID)가 아닌 참모장 (TEACHER.Name for Chief)을 어떻게 얻을 수 있습니까?

SELECT DEPARTMENT.Name, TEACHER.Name, TEACHER.IDCode, POST.Name, TEACHER.Tel, TEACHER.Salary, TEACHER.Rise, TEACHER.HireDate, Chief 
FROM TEACHER, DEPARTMENT, POST 
WHERE TEACHER.ID_Post = POST.ID AND 
    TEACHER.ID_Department = DEPARTMENT.ID; 
GO 

답변

10

JOINTEACHER 테이블을 한 번 더, 그래서 같은 :

SELECT 
    d.Name, 
    t.Name, 
    t.IDCode, 
    p.Name, 
    t.Tel, 
    t.Salary, 
    t.Rise, 
    t.HireDate, 
    chief.Name 'Chief Name' 
FROM TEACHER t 
INNER JOIN TEACHER chief ON t.Chief = chief.ID 
INNER JOIN DEPARTMENT d ON t.ID_Department = d.ID 
INNER JOIN POST p ON t.ID_Post = p.ID; 

그리고 ANS-SQL-92을 사용

이 하나의 (a 수석의 ID) 단지 정수를 얻는다 쿼리에서 사용중인 이전 구문 대신 JOIN 구문을 사용하십시오. They are the same이지만 권장되는 구문입니다.

+0

완벽한을, 감사합니다! – Aremyst

+0

SQL 서버는 실제로 SQL에서 식별자가 아닌 문자 리터럴을 나타내는 작은 따옴표로 열 별칭을 지정할 수 있습니까? –

+0

@a_horse_with_no_name - 내가 아는 한 예, 열 별칭을 작은 따옴표로 지정할 수 있습니다. 그러나 출력을 위해 문자 리터럴 형식으로이 방법으로 썼습니다. 그러나 이것에 당신의 권고는 무엇입니까? –

1

이 작동합니다 :

SELECT DEPARTMENT.Name, TEACHER.Name, TEACHER.IDCode 
    , POST.Name, TEACHER.Tel, TEACHER.Salary, TEACHER.Rise, TEACHER.HireDate, c.Name as ChiefName 
    FROM TEACHER 
    join DEPARTMENT on TEACHER.ID_Department = DEPARTMENT.ID 
    Join POST on TEACHER.ID_Post = POST.ID 
    Left Join TEACHER c on c.ID=TEACHER.Chief