Не удалось связать многосоставный идентификатор «t1.LogTime». Что я пропустил?

#mysql #identifier

#mysql #идентификатор

Вопрос:

Мне нужны некоторые данные из журнала, например, кто водит машину XY день.

Запрос:

 SELECT
t1.LogTime, 
t1.UnitId, 
t1.Alarm, 
t1.Speed, 
t1.Km, 
t1.GPSVisibleSats, 
t1.InputMask, 
t1.AX0, 
t1.Country, 
t1.City, 
t1.Street,
t3.Name
FROM dbo.t_log AS t1
LEFT JOIN
  (SELECT TOP 1 * FROM dbo.t_driver_log AS v1 WHERE v1.UnitId = '391.03.016' AND t1.LogTime BETWEEN v1.StartTime AND v1.StopTime) AS t2 ON ( t1.UnitId = t2.UnitId )
LEFT JOIN dbo.t_driver AS t3 ON ( t2.DriverId = t3.DriverId ) 
WHERE t1.UnitId = '391.03.016' AND t1.LogTime BETWEEN '2016-10-04 00:00:00' AND '2016-10-04 23:59:59'
  

что не так с этими ребятами? Ошибка возникла из подзапроса.

Схема SQL

Комментарии:

1. Вы скажите мне: что он делает не так?

Ответ №1:

Проблема с подзапросом, поскольку вы не можете напрямую обращаться t1.LogTime к подзапросу напрямую, попробуйте обновленный скрипт, попробуйте перенести AND t1.LogTime BETWEEN t2.StartTime AND t2.StopTime это условие JOIN

 ...
FROM dbo.t_log AS t1
LEFT JOIN
(SELECT TOP 1 * 
 FROM dbo.t_driver_log AS v1 
 WHERE v1.UnitId = '391.03.016'
) AS t2 ON ( t1.UnitId = t2.UnitId  AND t1.LogTime BETWEEN t2.StartTime AND t2.StopTime)
LEFT JOIN dbo.t_driver AS t3 ON ( t2.DriverId = t3.DriverId ) 
WHERE t1.UnitId = '391.03.016' AND t1.LogTime BETWEEN '2016-10-04 00:00:00' AND '2016-10-04 23:59:59'