2013-03-08 3 views
0

안녕하세요 저는 다음 테이블 구조를 가지고 있습니다.SQL 쿼리가 아무 값도 반환하지 않았습니다.

Professor (EMP ID,Name,Status,Salary,Age) 
Course(Course ID,Course Name,Points) 
Works(Course ID,EMP ID,Class ID) 

다음 작업을 수행해야합니다. 같은 클래스 '클래스 10'

을 위해 2 개의 다른 코스 M1과 M2를 촬영 한 종업원의

반환 목록이 내가 쓴 쿼리입니다.

SELECT p.EmpID, p.Name, p.Status, p.Salary 
FROM professor p, course c, works w 
WHERE p.EmpID = w.EmpID 
AND 
w.CourseID = c.CourseID 
AND 
w.ClassID = 10 
AND 
c.CourseName IN (SELECT CourseName FROM course WHERE CourseName = 'm1' 
AND CourseName = 'm2') 

그러나 db에 데이터가 있어도 쿼리에서 아무런 값도 반환하지 않습니다.

+0

라고 봐입니까? –

답변

2

이 문제는 일반적으로 Relational Division

SELECT a.EmpID, a.name 
FROM Professor a 
     INNER JOIN Works b 
      ON a.EmpID = b.EmpID AND b.ClassID = 10 
     INNER JOIN Course c 
      ON b.CourseID = c.CourseID 
WHERE c.CourseNAME IN ('M1', 'M2') 
GROUP BY a.EmpID, a.name 
HAVING COUNT(DISTINCT c.CourseNAME) = 2 
+0

쿼리를 실행할 때이 오류가 발생합니다 - on 절에있는 'EmpID'열이 모호합니다. – user1844638

+0

오타 내 잘못 입력 한 경우 죄송합니다. 다시 시도하십시오. . 'a.EmpID = EmpID'는'a.EmpID = b.EmpID'이어야합니다. –

+0

있어요 .... 고마워요. – user1844638

1

하위 쿼리

(SELECT CourseName FROM course WHERE CourseName = 'm1' AND CourseName = 'm2') 

아무 것도 반환하지 않습니다. coursename 널 (NULL)은 "AND"

+0

'CourseName = 'm1'AND CourseName = 'm2 '' * 항상 ** FALSE **를 반환합니다 ** –

+0

정확하게 이것은 요점입니다. 따라서 IN ... 아무것도 찾지 못할 것이고 따라서 전체 쿼리는 아무 것도 반환하지 않을 것입니다. –

관련 문제