10

私は2つのテーブルを持っています:

  • 表 1 = ガソリン スタンドの名前 (ペアで)
  • Table2 = 座標情報があります (特に経度と緯度)

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

特定のケースでは、Lattitude の名前を lat に変更する必要はありませんが、テーブルをそれ自体で更新することになり、列に別の名前を付けることを余儀なくされた場合は、後で頭痛の種を減らすことができます。

于 2013-02-07T01:12:02.903 に答える