SQL-подзапрос, недопустимое имя столбца

#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