sql update table set - 无法绑定多部分标识符

时间:2013-02-07 01:06:53

标签: sql sql-server sql-update

我有两张桌子:

  • 表1 =加油站名称(成对)
  • 表2 =有协调信息(经度和纬度等)

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很陌生,并且很难理解为什么有些东西有效而其他东西没有用。基于我在上面发布的链接,我的初始查询应该有效 - 不是吗?也许我并没有直接思考,因为我花了很多时间尝试这个,我终于得到了同事的帮助(她提出了我上面提到的方法)。

2 个答案:

答案 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,但如果您最终更新自己的表并强制自己为列提供不同的名称,它将为您节省麻烦。