10

我有 2 张桌子:

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

1 示例:

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

表2示例:

IDInfo     Name  Lattitude    Longitude
-------------------------------------------
93353477   BAR   37.929654    -87.029622

我想用位于tableA. 我尝试按照SQL Server 2005 执行以下操作:多部分标识符……无法绑定

update table1
set t1.[Lattitude1] = t2.[Lattitude]
from table1 t1
left join table2 t2 
on (t1.StationID1 = t2.IDInfo)

我收到以下错误消息:

消息 4104,级别 16,状态 1,行 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 很陌生,很难理解为什么有些东西有效而另一些无效。根据我在我的初始查询上方发布的链接应该有效 - 不是吗?也许我没有直接思考,因为我花了很多时间尝试这个,最后我得到了一位同事的帮助(她建议了我上面提到的方法)。

4

2 回答 2

19

我认为您可以修改 UPDATE 语句以引用 UPDATE 行中的表别名。

update t1
set t1.[Lattitude1] = t2.[Lattitude]
from table1 t1
left join table2 t2 
on (t1.StationID1 = t2.IDInfo)
于 2013-02-07T01:11:18.573 回答
1

您需要更改内部表并为相似的列提供不同的别名。这应该有效。

update table1
set [Lattitude1] = x.[lat]
from 
(
    SELECT IDInfo [id], Lattitude [lat] FROM 
    table2
) x
WHERE
StationID1 = x.[id]

在您的特定情况下,没有必要将 Latitude 重命名为 lat,但是如果您最终自己更新了一个表并强迫自己为列提供不同的名称,那么它将为您省去在路上的麻烦。

于 2013-02-07T01:12:02.903 回答