当前位置: 首页 > 知识库问答 >
问题:

查询有问题,特别是连接有问题

狄令
2023-03-14

下面的代码是完全错误的,根本不起作用。我主要是想查看我的表格,并为一个部门的学生超过40人的部门编制一个DeptName和学生总数的列表。

我对一般的加入感到困惑,如果有人能解释并指出我的错误之处。我肯定还有其他问题,所以任何帮助都会有帮助

所以基本上是一个系接一个模块,一个学生入一个模块。学生不能选修本系以外的课程。所以每个学生应该有一个模块连接到一个系

其他表中的所有ID字段都是外键,您可以猜到,更改表并不是我想在这里做的,我只想按现在的情况做这个查询

相关表列

表DepartmentDeptID,DeptName,Faculty,Address

表模块moduleid,modulename,deptid,programe

表学生studentid,studentname,dob,address,studytype,`

表注册eID,studentid,moduleid,学期,年份

SELECT Department.DeptName, COUNT(Student.StudentID) AS 'No of Students'  FROM Department LEFT JOIN Module ON Department.DeptID= Module.DeptID LEFT JOIN Enrolment ON Module.ModuleID=  Enrolment.StudentID LEFT JOIN Student.StudentID 
GROUP BY(Department.DeptID)
HAVING COUNT(Student.StudentID)>=40

我没有把这里的每一张桌子都包括在内,因为有很多。

但是,除非我完全搞错了,否则您不需要访问他们所教模块的staff表中的ModuleID或与此无关的东西。因为里面没有学生或系的详细信息。

如果是这样的话,我会很快把它修好的。

共有2个答案

郭永怡
2023-03-14

因此,在编写join子句时,students对它有点不确定,推测这些都应该是内部join。

我使用别名重新设置了查询的格式,使其更容易阅读。

由于要计算每个DeptName的行数,您可以简单地执行count(*),同样地,在having中,您只计算大于40的计数。在没有看到架构和数据的情况下,不可能知道是否有重复的学生,如果是这种情况,并且您想要distinct Students count可以修改为count(distinct s.studentid)

select d.DeptName, Count(*) as 'No of Students'  
from Department d
join Module m on m.DeptId=d.DeptId
join Enrolment e on e.StudentId=m.ModuleId
join Students s on s.StudentId=e.studentId
group by(d.DeptName)
having Count(*)>40

此外,查看您的加入条件,注册表是否相关?

select d.DeptName, Count(*) as 'No of Students'  
from Department d
join Module m on m.DeptId=d.DeptId
join Students s on s.StudentId=m.moduleId
group by(d.DeptName)
having Count(*)>40
罗允晨
2023-03-14

您需要使用inner join,而不是left join,因为您只需要从这三个表中选择相关行。

groupy byhaving子句似乎很好。由于您需要学生人数超过40人的院系,而不是>=请使用count(e.studentId)>40

SELECT d.DeptName, COUNT(e.StudentID) AS 'No of Students'  FROM Department d INNER JOIN Module m ON d.DeptID= m.DeptID inner JOIN Enrolment e ON m.ModuleID=  e.StudentID LEFT JOIN Student.StudentID 
GROUP BY(d.DeptName)
HAVING COUNT(e.StudentID)>40
 类似资料:
  • 我有一个带有持久卷的WordPress和MySQL容器。我一直在努力学习docker,并在学习过程中错误地删除了老docker撰写。yml和mysql卷之外的所有卷。我现在已经尽我所能将其重新创建到compose文件中,但每当我启动机器时,它都无法连接到MySQL服务器。有谁能指出我哪里做错了。 我怀疑我对两者之间的联系有问题,但我不确定。 docker-compose.yml: 日志:

  • 我是GraphQL的新手,我正试图做一个突变来从我的数据库中删除一篇文章,但我不知道如何删除。我使用Node.js,猫鼬和GraphQL。 这是我的模式的变异。 这是我在调用API删除文章时使用的查询。 我做错了什么? 我收到一个错误的400请求。消息:“无法查询类型为“变异”的字段“删除”

  • 我试图实现连接,但我面临错误。我有产品表和商店表。产品表引用通过外键存储表,如下所示: 产品JAVA 现在,我展示tore.java 现在,我展示仓库 现在,这个错误是因为我在最后两个查询中实现了join。我想做的是购买所有商店位于特定城市或州的产品,如上图所示。 我遇到的错误是: 启动应用程序上下文时出错。要显示自动配置报告,请在启用调试的情况下重新运行应用程序。2016-10-16 09:53

  • 问题内容: 我正在尝试将SQL转换为SQLAlchemy。我要查询的SQL版本如下: 我的SQLAlchemy查询如下: 我收到一个错误 如果我将SQLAlchemy查询调整为以下内容: 结果= query.all() 我得到一个错误 任何帮助,将不胜感激,谢谢! 问题答案: 一旦调用,就无法访​​问 对象 ,而只能通过访问器访问列。 而是执行以下操作:仅加载所需的列,以避免任何名称冲突: 然后在

  • 问题内容: 遇到了一些严重的问题,无法解决如何针对我的情况建立适当的查询。.可以肯定的是,这取决于正确地连接表,但是经过大量的谷歌搜索之后,我似乎无法弄清楚… 我有下表。 和… 和… 希望我能够正确解释这一点。.我在Main中有一堆记录,我需要从中获取信息。.我需要能够对WhenDate和TypeID进行过滤。我还需要从链接到StatusID的状态表中获取StatusText。 问题: 次要表链接

  • 我有以下数据结构格式: 我已经在里面有以下数据: 我已经阅读了参考资料和文档,在完成以下内容时有点不知所措: > 什么是“哪里”等价物?ie.选择查找具有的的条目 在中没有看到适用的示例https://www.tarantool.io/en/doc/2.2/reference/reference_lua/box_space/#lua-function.space\u object.select 用