mysql - Mysql[5.7] 嵌套选择查询无法识别父表
问题描述
Mysql 5.7嵌套选择查询在那个时候抛出错误
Unknown column 'CRoute.ID' in 'where clause'
这是我的查询
SELECT CTrip.ID, CRoute.Name,
(SELECT COUNT(StudentID) FROM CRouteStudent WHERE CRoute.ID = CRouteStudent.RouteID) AS ExpectedStudents,
(SELECT COUNT(*) FROM (SELECT COUNT(*) FROM CRouteStudent WHERE CRoute.ID = CRouteStudent.RouteID GROUP BY Stop) as a) AS ExpectedStops
FROM `CTrip`
JOIN `CRoute` ON `CRoute`.`ID` = `CTrip`.`RouteID`
JOIN `CRouteSchedule` ON `CRouteSchedule`.`RouteID`=`CTrip`.`RouteID`
WHERE `CTrip`.`Direction` = '1'
LIMIT 30
ExpectedStudents 正在工作,ExpectedStops 抛出错误
注意此查询在 mysql 8.0 中工作
解决方案
子查询嵌套得很深。
你可以尝试更换
(SELECT COUNT(*) FROM (SELECT COUNT(*) FROM CRouteStudent WHERE CRoute.ID = CRouteStudent.RouteID GROUP BY Stop) as a)
和:
(SELECT count(DISTINCT stop)
FROM croutestudent
WHERE croute.id = croutestudent.routeid)
+
EXISTS (SELECT *
FROM croutestudent
WHERE croute.id = croutestudent.routeid
AND stop IS NULL)
+ EXISTS ...
如果该部分stop
不可为空,则可以将其保留。
推荐阅读
- java - 小胡子作为未知文件(IntelliJ Idea)
- php - 如何在条件之间应用带有分区键的 DynamoDB 表?
- c# - System.Text.Json.JsonSerializer 无法反序列化成员
- visual-studio - 柯南 + Cmake.gui + Visual Studio = 100% 没有
- opencv - opencv 将倾斜视图转换为平面视图
- python-3.x - 如何将熊猫数据框列转换为列表
- node.js - 使用 node.js 从 mongodb 更改用户密码
- python - 如何从python中的字符串中获取运算符?
- c# - CLR 是 C# 编译器还是这两个不同的东西?
- python-3.x - 如何一起使用 f'string bytes'string?