Mysql[5.7]嵌套选择查询无法识别父表

标签 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)

如果 stop 不可为空,则可以保留 + EXISTS ... 部分。

关于Mysql[5.7]嵌套选择查询无法识别父表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59659834/

相关文章:

php - Codeigniter,来自数据库的动态菜单

mysql - 如何在mysql中为IN子句添加一个额外的值

MySQL 查找包含特定产品的所有订单,并且仅查找该产品

MySQL 5.7 : Problems with DATETIME = '0000-00-00 00:00:00'

mysql创建脚本,错误给我带来麻烦

Php 更新查询不起作用

mysql - 如何在位列上对 MySQL 表进行分区,并在结果分区上进行子分区

mysql - MySQL 5.7 的默认 root 密码是什么

mysql - 多列主键的最小值

mysql - 即使使用 SET FOREIGN_KEY_CHECKS=0 也无法创建表(错误 1215);