繁体   English   中英

SQL子查询,无效的列名

[英]SQL Subquery, Invalid Column Name

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

问题是什么 ?

表“ 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

尝试这个

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

我认为,您正在寻找这样的东西:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM