我有两张桌子:
Table1 :
的示例StationID1 StationID2 Name1 Name2 Lattitude1 Longitude1 Lattitude2 Longitude2 Distance
------------------------------------------------------------------------------------------------
93353477 52452 FOO BAR NULL NULL NULL NULL NULL
93353527 52452 HENRY BENNY NULL NULL NULL NULL NULL
93353551 52452 GALE SAM NULL NULL NULL NULL NULL
Table2 :
的示例IDInfo Name Lattitude Longitude
-------------------------------------------
93353477 BAR 37.929654 -87.029622
我想用tableA
中的坐标信息更新此表。我按照SQL Server 2005: The multi-part identifier … could not be bound
update table1
set t1.[Lattitude1] = t2.[Lattitude]
from table1 t1
left join table2 t2
on (t1.StationID1 = t2.IDInfo)
我收到以下错误消息:
Msg 4104,Level 16,State 1,Line 1
无法绑定多部分标识符“t1.Lattitude1”。
但是,如果我执行以下操作,则可以将其存储到另一个表中。
SELECT t1.[StationID1]
,t1.[StationID2]
,t1.[Name1]
,t1.[Name2]
,t2.[Lattitude] AS [Lattitude1]
,t2.[Longitude] AS [Longitude1]
,t3.[Lattitude] AS [Lattitude2]
,t3.[Longitude] AS [Longitude2]
from table1 t1
left join table2 t2
on (t1.StationID1 = t2.IDInfo)
left join table2 t3
on (t1.StationID2 = t2.IDInfo)
我对SQL很陌生,并且很难理解为什么有些东西有效而其他东西没有用。基于我在上面发布的链接,我的初始查询应该有效 - 不是吗?也许我并没有直接思考,因为我花了很多时间尝试这个,我终于得到了同事的帮助(她提出了我上面提到的方法)。
答案 0 :(得分:14)
我认为您可以修改UPDATE语句以引用UPDATE行中的表别名。
update t1
set t1.[Lattitude1] = t2.[Lattitude]
from table1 t1
left join table2 t2
on (t1.StationID1 = t2.IDInfo)
答案 1 :(得分:0)
您需要更改内部表并为相似的列提供不同的别名。这应该有用。
update table1
set [Lattitude1] = x.[lat]
from
(
SELECT IDInfo [id], Lattitude [lat] FROM
table2
) x
WHERE
StationID1 = x.[id]
在您的特定情况下,没有必要将Lattitude重命名为lat,但如果您最终更新自己的表并强制自己为列提供不同的名称,它将为您节省麻烦。