2013-03-18 37 views
2

表:SQL查詢來獲取所有的教授

  • 教授(EMP ID,名稱,狀態,薪水,年齡)
  • 課程(課程編號,課程名稱,點)
  • 廠(場ID,EMP ID,類ID)

這是我的DB模式,並從該模式我需要得到:

返回所有教授教授的課程。

我寫下面的查詢顯然是錯誤的任何人都可以請幫助我,因爲我是新來的SQL。

SELECT 
    c.coursename 
FROM 
    professor p, works w, course c 
WHERE 
    p.empid = w.empid 
    AND w.courseid = c.courseid 
    AND p.empid IN (SELECT all(empid) FROM professors) 
+0

[不良習慣踢:使用舊樣式的JOIN(http://sqlblog.com/blogs/ aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 舊式*逗號分隔的表*樣式列表被替換爲* proper * ANSI在ANSI - ** 92 ** SQL標準中使用'JOIN'語法(**超過20年前**),並且不鼓勵使用 – 2016-01-31 21:24:50

回答

3

此問題被稱爲Relational Division。從你的問題,你想:

..Return已經教導所有的教授這些課程..

你的標題正好相反你想要什麼。

此查詢會給你,

SELECT a.CourseID, a.Course 
FROM Course a 
     INNER JOIN Works b 
      ON a.CourseID = b.CourseID 
     INNER JOIN Professor c 
      ON b.EmpID = c.EmpID 
GROUP BY a.CourseID, a.Course 
HAVING COUNT(DISTINCT c.EmpID) = (SELECT COUNT(*) FROM Professor) 
+3

我不知道爲什麼這個答案是downvoted。據我所知,我已經閱讀了這個問題,並且我明白了這個問題':''@downvoter,我想知道這有什麼問題,這樣我可以進一步改進我的答案。 – 2013-03-18 06:10:49

+0

+1這麼好的問題。 @JW。只是想問(好奇心)爲什麼你保持**狀態**忙,因爲就我而言,你總是**活躍**在堆棧溢出並準備好幫助其他人。 **:P ** – Luv 2013-03-18 06:29:09

+0

@Luv多任務':)'實際上這是一箇舊的狀態..它已經完成了。這就是爲什麼一些標籤有效。 – 2013-03-18 06:29:48

0

嘗試此查詢

SELECT 
    courseName 
FROM 
    Course c 
WHERE 
    NOT EXISTS (SELECT 
     EMP_ID 
    FROM 
     Professor p, 
     works w 
    WHERE 
     c.CourseID = w.CourseID AND 
     p.EMP_ID <> w.EMP_ID)