这个问题与我们的类数据库有关,它要求我们"列出所有在商务楼设有办公室但不在商务楼授课的教员名单。
我的前两个查询正确地找到了三个在公共汽车上有办公室的教员,我的最后一个查询自己找到了那些不在商业大楼教书的教员,但是当它们结合在一起时,我希望它能缩小到一个教员,而不是产生我的前两个查询语句的结果。
我已经尝试了下面的代码以及多个变化+加入变化,并得到它产生两个名字,而不是目前的三个,但从来没有只是一个我之后。我搜索了一些相关的帖子,并尝试了一些解决方案,但没有一个适合我。
我知道从查看原始数据,应该填充最后查询的唯一名称是Jerry Williams(f_id 3),但是,我不知道如何使用两个必要的where子句来确保教师在公共汽车大楼有他们的办公室,并且他们不在公共汽车大楼教书。
我认为它应该返回Jerry Williams,因为我的最终where语句包含一个and语句来过滤我正在寻找的结果。相反,它只包括上面查询的结果,上面的查询说明了在公共汽车大楼设有办公室的三个学院。
教员表数据教师
位置表数据位置
Course_section表数据course_section
这是我当前的代码(数据包括在上面):[mysql脚本][1][1]: https://i.stack.imgur.com/Uv5Ed.png
选择f_first f_last从教师Where loc_id in ()选择loc_id从位置其中bldg_code在(选择bldg_code从course_sectionwhere (bldg_code = "BUS") and (loc_id <>5 . and loc_id <>6 . and loc_id <>7 . and loc_id <>8)))
SELECT f_name, l_name FROM faculty
INNER JOIN location -- Only keep records that match both a faculty & a...
ON location.loc_id = faculty.loc_id
AND location.bldg_code = 'BUS' -- ...Business location
WHERE faculty.f_id NOT IN ( -- Only select faculty...
SELECT f_id FROM course_section
WHERE course_section.f_id = faculty.f_id -- ...if they do not have a course
AND course_section.loc_id IN (
SELECT loc_id FROM location
WHERE location_loc_id = course_section.loc_id
AND location.bldg_code = 'BUS' -- ...in the Business building
)
)
INNER JOIN
只保留在商务大楼工作的教员,然后WHERE
子句检查…
- 没有找到教员id
- …在他们的课程列表
- …也有一个loc_id在一个位置与业务代码
不是测试。