寻找以下问题的指导:打印具有一个或多个未满 18 岁的专业的部门名称。
My table looks like this:
Student(sid,sname,sex,age,year,qpa)
Dept(dname,numphds)
Prof (pname,dname)
Course (cno,cname,dname)
Major(dname,sid)
Section(dname,cno,sectno,pname)
Enroll(sid,grade,dname,cno,sectno)
我最终使用以下方法得到了结果:
SELECT dept.dname
FROM dept
INNER JOIN major on major.dname = dept.dname
INNER JOIN student on major.sid = student.sid and student.age<18
group by dept.dname
having count(*)>0
limit 5;
您忘记了与DEPT
表相关的FROM
子句和与STUDENT
表相关的第二个JOIN
(由SID
链接)。此外,您需要限制 18 岁以下学生的JOIN
。然后,最后,您需要至少有 1 名符合年龄标准的学生dname
......
SELECT DISTINCT dept.dname
FROM dept
inner join major on major.dname = dept.dname
inner join student on major.sid = student.sid and student.age < 18
group by dept.dname
having count(*)>0;
我不确定我是否理解它,但这是一个没有看到任何真实数据的尝试:
考虑以下几点:
-
INNER JOIN
需要存在关系(双方匹配),这满足了专业要求。 - 按年龄筛选以限制年龄等于 18 岁的人。
- 将其提炼为我们关心的不同部门(例如年龄=17的"部门A",年龄=16的"部门A"——我们只需要一个"部门A")。
SELECT DISTINCT d.dname -- "print the name of departments"
FROM Dept d --
INNER JOIN Major m -- "that have one or more majors"
INNER JOIN Student s --
ON s.sid = m.sid --
ON m.dname = d.dname --
WHERE s.Age < 18 -- "who are under 18 years old"