2013-07-16 2 views
0

나는 여러 가지 방법을 시도했고, EXIST가 도움이 될 것이라고 생각하지만 SQL 문을 구현하는 방법을 모르겠습니다. 누군가 제발 도와 줘?MS 액세스 SQL 전에 학생들이 받아 들여지지 않은 것을 보여줍니다

MS Access 데이터베이스에는 세 개의 테이블이 있습니다.

Students (Student Name, Email) 
Courses (Course Name, Fees) 
Registration (Course Name, Student Name) 

은 지금 나에게 각 학생이 이전에 촬영되지 않은 모든 클래스를 보여줄 수있는 쿼리를 만들려고합니다. 그러면 등록 관리자가 더 많은 클래스 등록을 수행 할 수 있습니다.

MS ACCESS에서 어떻게 쉽게 할 수 있습니까? 그 결과 쿼리는해야한다 :

제임스 | 고급 플래시
제임스 | 고급 편집
아드리안 | 기본 편집
아드리안 | 기본 플래시
아드리안 | 고급 플래시
아드리안 | 고급 편집

(James는 'Basic'과 'Advanced'클래스를 모두 배우지 않은 'Basic'클래스를 모두 택했습니다.

답변

1

아이디어는 모든 클래스의 stu 덴트 및 코스. 그런 다음 left join에서 Registrations으로하십시오. 이 일치하지 않는 것이 있다면과 일치하는 과목은 수강하지 않습니다.

액세스 구문은 다른 데이터베이스와 약간 다릅니다. 나는 다음과 같은 쿼리의 유형에 대한 액세스 구문 생각 :

select s.studentName, c.CourseName 
from ((select studentName 
     from students 
    ) s, 
     (select CourseName 
     from courses 
    ) c 
    ) left join 
    Registration r 
    on r.StudentName = s.StudentName and 
     r.CourseName = s.CourseName 
where r.StudentName is NULL; 

편집 :

내가 괄호가 액세스가 조인 이해하기가 올바르게 정렬해야 할 수도 있습니다 생각합니다. 어쨌든 다음과 같이 작동해야합니다. driver 하위 쿼리는 다음 left join에 사용되는 학생들과 과정의 모든 조합을 가져옵니다 대답, 고든에 대한

select driver.StudentName, driver.CourseName 
from (select distinct StudentName, CourseName 
     from students, courses 
    ) driver left join 
    Registration r 
    on r.StudentName = driver.StudentName and 
     r.CourseName = driver.CourseName 
where r.StudentName is NULL; 
+0

thaks을하지만 이상하게도, 나는 왼쪽에 구문 오류가 가입 얻을. Access가 LEFT JOIN을 지원합니까? – user2418485

+0

슈퍼! 우리가 가까이있어, 고든. 그러나, 지금 나는 모든 것을 얻는다. 의미, 나는 그들이 가지고 간 모든 과정 및 또한 그들이 가지고 가지 않은 모든 과정을 얻는다. 나는 그것을 고칠 때 길을 잃는다. 이 문제를 어떻게 해결할 수 있는지 공유하고 싶습니까? 고든, 고든 :) – user2418485

+0

또한, 고든, 어쨌든 내 개발 환경에서 SQL 문에서 그것을 인식하지 못할 것이라고 내가 '드라이버'를 사용하지 않고 이것을 할 수 있습니다. Driver가있는 모든 명령문은 IDE가 Access에 저장된 쿼리 목록에 포함시키지 않기로 선택합니다. : ( – user2418485

관련 문제