【问题标题】:SQL query to retrieve all the professors检索所有教授的 SQL 查询
【发布时间】:2016-02-01 05:24:24
【问题描述】:

表格:

  • 教授(EMP ID、姓名、状态、薪水、年龄)
  • 课程(课程 ID、课程名称、分数)
  • 作品(课程 ID、EMP ID、班级 ID)

这是我的数据库架构,我需要从该架构中获取:

返回所有教授教授过的课程。

我写了以下查询,这显然是错误的,任何人都可以帮助我,因为我是 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)

【问题讨论】:

标签: mysql sql


【解决方案1】:

这个问题被称为Relational Division。从您想要的问题中:

..返回所有教授教授过的课程..

你的标题和你想要的完全相反。

这个查询会给你什么,

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)

【讨论】:

  • 我不知道为什么这个答案被否决了。据我所知,我已经阅读了这个问题并且我理解了它:)@downvoter,我想知道这有什么问题,所以我可以进一步改进我的答案。
  • +1 真是个好问题。 @JW。只是想问(好奇地)你为什么一直保持 Status 忙碌,因为就我而言,你总是 Active 堆栈溢出并准备帮助其他人。 :P
  • @Luv multitasking :) 实际上这是一个旧状态..嘿嘿它已经完成了。这就是为什么在某些标签上活跃的原因。
【解决方案2】:

试试这个查询

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2014-08-18
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多