2009-08-04 4 views
2

나는 여러 테이블 를 검색하는 데 문제가 있어요, 나는이 개 테이블어떻게 오른쪽/왼쪽 조인을 검색합니까?

tblcourse

-courseid

-name

-status

tblenroll

-courseid이 (tblcourse에서 courseid 보유)

-studentid

학생이 학생 NUM 1990을 가지고 있으며 그가

내가 1990 년이되는 과정과 그

에 가입 aint을하는 사람의 이름을 얻으려면 tblenrol에서이 개 과정에 등록 말할 수

내가 가장 가까운 것은 tblcourses에 대한 올바른 외부 조인입니다. 원하는 결과를 얻지 만, 일단 where 절을 첨부하면 학생 번호가없는 나머지 과정을 제공하지 않을 것입니다.

도움이 되었습니까? (연산에 의해 게시 대답에서 추가)

편집 회신

안녕하세요, 감사합니다. 좋아, 내가 제대로 설명했다고 생각하지 않는다.

tblcourse이 tblenroll 많은 재학생

을 따라서 보유하고 많은 과정을 개최, 우리는 6 개 과정을 상상한다. 우리가 실행하면 1 3 학생 1880에 대한 학생 1990 레지스터

(한 1990 것을 선택하지 않았다)이 :

WHERE (tblenroll.studentid = 1990 or tblenroll.studentid is null) 

또는

where e.studentid is null or e.studentid is not null and e.studentid = 1990 

은 5 개 과목을 선택할 것입니다, 3은 1990에 등록되고 2는 NULL입니다. 1 1990 - - 3 NULL 여섯 번째 사람은이 쿼리가 올바른 결과를 제공하지만 내가

1880을 얻을 것이다 위의와 함께 특정 학생

SELECT 
    tblenroll.studentid as stud, 
    tblcourse.name, 
    tblenroll.studentid, 
    tblenroll.courseid, 
    tblcourse.courseid, 
FROM 
    tblenroll 
Right Join tblcourse ON tblenroll.courseid = tblcourse.courseid 

을 위해 1880

에 등록 - 2

혼란스러운 것들!

+1

당신이 당신의 SQL을 게시 할 수 있습니다 :

나는이 (내가 SQL 서버 2005과 유사한 테이블/구조를 테스트) 작업을해야 믿지? – andrewWinn

답변

2
select tblcourse.name, e.studentid 
from tblcourse c left join tblenroll e on c.courseid = e.courseid 
where e.studentid is null or e.studentid is not null and e.studentid = :id 

당신이 넣어 IIF 함수의 종류를 사용할 수있는 DB에 따라

course1 1990 
course2 NULL 
course3 NULL 
course4 1990 
... 

가 발생합니다 true 또는 false를 1 또는 0, - 두 번째 요소로 어떤 플래그

0

학생 ID가 조회중인 실제 ID뿐만 아니라 null이 될 수도 있습니다. 예를 들어

시도 :

SELECT tblenroll.studentid, tblcourse.courseid, tblcourse.name, tblcourse.status 
FROM tblenroll RIGHT OUTER JOIN tblcourse ON tblenroll.courseid = tblcourse.courseid 
WHERE (tblenroll.studentid = 1990 
or tblenroll.studentid is null) -- this allows the courses in which 1990 is not enrolled 

편집 : 나는 확실히 처음 통해이를 생각하지 않았다. 위의 쿼리는 당연한 접근이며 아마도 OP 을 원하지 않는 동일한 결과를 반환 할 것입니다. 트릭은 테이블이 조인 된 후에 where 절을 사용하는 것이 아니라 조인에 참여하는 tblenroll에서 행을 제한하는 것입니다.

SELECT tblenroll.studentid, tblcourse.courseid, tblcourse.name, tblcourse.status 
FROM tblenroll RIGHT OUTER JOIN tblcourse ON tblenroll.courseid = tblcourse.courseid 
    AND tblenroll.studentid = 1990 
관련 문제