#sql #sql-server
#sql #sql-сервер
Вопрос:
TSQL сообщает: недопустимое имя столбца ‘VehicleId’
SELECT
(SELECT dbo.Vehicles.Id FROM dbo.Vehicles JOIN dbo.Movements
ON dbo.Vehicles.Id=dbo.Movements.VehicleId
WHERE dbo.Movements.Id=dbo.Alarms.MovementId) As VehicleId
FROM [dbo].[Alarms]
WHERE
VehicleId =1
В чем проблема?
Комментарии:
1. Что вы на самом деле пытаетесь сделать? Пожалуйста, покажите нам схему
2. Покажите нам схему ваших таблиц, чтобы мы могли лучше ее понять
3. Попробуйте xtable. Идентификатор транспортного средства = 1
4. Я думаю, что вы не можете использовать псевдоним из
select
where
предложения in
Ответ №1:
В таблице Alarms
нет столбца с именем VehicleId
Предложение where не использует псевдоним
SELECT
(SELECT dbo.Vehicles.Id FROM dbo.Vehicles JOIN dbo.Movements
ON dbo.Vehicles.Id=dbo.Movements.VehicleId
WHERE dbo.Movements.Id=dbo.Alarms.MovementId) As VehicleId
FROM [dbo].[Alarms]
WHERE
VehicleId = 1 -- this is wrong
Вместо использования коррелированного подзапроса попробуйте несколько соединений
SELECT dbo.Vehicles.Id
FROM dbo.Vehicles
JOIN dbo.Movements
ON dbo.Vehicles.Id = dbo.Movements.VehicleId
JOIN dbo.Alarms
ON dbo.Alarms.MovementId = dbo.Movement.Id
WHERE dbo.Movements.VehicleId = 1
Ответ №2:
Я думаю, вы ищете что-то вроде этого:
SELECT Alarms.*
FROM dbo.Vehicles JOIN
dbo.Movements ON dbo.Vehicles.Id=dbo.Movements.VehicleId JOIN
dbo.Alarms ON dbo.Movements.Id=dbo.Alarms.MovementId
WHERE VehicleId =1
Ответ №3:
Попробуйте это
SELECT Alarms.*
from
(SELECT dbo.Vehicles.Id FROM dbo.Vehicles JOIN dbo.Movements
ON dbo.Vehicles.Id=dbo.Movements.VehicleId
WHERE dbo.Movements.Id=dbo.Alarms.MovementId) As VehicleId
join [dbo].[Alarms]
on VehicleId.ID = Alarms.vehicleID
WHERE
VehicleId =1