Mysql [5.7] вложенный запрос выбора не может определить родительскую таблицу - PullRequest
0 голосов
/ 09 января 2020

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

.

1 Ответ

0 голосов
/ 09 января 2020

Подзапросы вложены глубоко.

Вы можете попробовать заменить

(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 не обнуляется.

...