2017-04-13 8 views
0

ルックアップテーブルに基づいてファクトテーブルを更新したいとします。ファクトテーブルのAddressidを更新してルックアップカラムのnewaddressに置き換え、ルックアップテーブルのoldaddressカラムと比較する必要があります。SQL UPDATEステートメントのエラー

私は、SQL文の次書かれています:

Update [dbo].[fact_P] 
Set Address_Id = (Select AddressID_new 
        From AddressLookup 
        Where fact_P.Address_Id = Lookup.AddressID_old) 

が、それはエラーを投げています。

+1

:検索は「AddressLookup」であるとして、私は自分のテーブル名で間違えておりませんので、もし、あなたが参加する必要がありますか? –

+0

@a_horse_with_no_name SQL ServerやAccessのように見えますが、私は前者に傾いています。しかし、私はそのエラーがDBに固有のものだとは思わない。 –

+3

***あなたはどうしていますか? ** –

答えて

0

誤ったエイリアス/テーブル名を使用してサブクエリのAddressID_old列を参照していました。私が間違っていない場合は、代わりにAddressLookup.Address_ID_oldを使用する必要があります。

UPDATE [dbo].[fact_P] 
SET Address_Id = (SELECT AddressID_new FROM AddressLookup al 
        WHERE fact_P.Address_Id = al.AddressID_old) 
0

UPDATEステートメントのクエリ以下の使用:それは1つの値を返す場合にのみ、一部、サブクエリが許可されているところで

UPDATE [dbo].[fact_P] SET Address_Id = AddressID_new 
    FROM AddressLookup al 
    WHERE fact_P.Address_Id = al.AddressID_old 
0

。あなたが使用しているDBMS

Update fp 
set fp.Address_Id=al.AddressID_new 
    from [dbo].[fact_P] fp join AddressLookup al 
     on fp.Address_Id= al.AddressID_old 
0
Update tgt 
set Address_Id = lu.Address_Id 
from [dbo].[fact_P] tgt 
inner join AddressLookup lu 
on tgt.Address_Id = lu.AddressID_old; 
+0

ありがとうございます。データが巨大なので、時間がかかります。私たちはマージを使用することができます。私たちはあなたの画面を見たり**あなたの心を読んだりできません。代わりにそれを速く実行してください。 – user7854107

+0

ソース表からのターゲット表に対して挿入または更新の両方を行う必要がある場合は、マージを使用する必要があります。とにかくパフォーマンスが向上するとは思わない。インデックス作成を正しく行うことができます。 – Biswabid

関連する問題