2011-11-09 21 views
0

同じスキーマを持つ2つのテーブルがあります.1つはデータがバルクロードされ、もう1つは私のライブテーブルです。私は行が異なるアップロードされたテーブルからライブテーブルを更新したい。私はここにかなり近いと思うが、どこで私の更新が実際に始まるだろうか?列の値が別のテーブルと異なるテーブルの行

これは私に実際に私は私のライブテーブルにプッシュしたいの変更必要があり、私の更新された行できます:私は、このSQL文は、仕事をするだろうと信じていますが、圧延でそれをテストしたい場合があります

SELECT USC.* FROM UpdateStagingCustomers AS USC 
JOIN StagingCustomers AS SC 
ON USC.CustomerNumber = SC.CustomerNumber 
AND USC.ManufacturerID = SC.ManufacturerID 
WHERE USC.ManufacturerID=18 AND SC.ManufacturerID = 18 
    AND USC.CustomerNumber IN(
     SELECT CustomerNumber FROM StagingCustomers WHERE ManufacturerID=18 
    ) 
    AND 
    (
    USC.Address1 <> SC.Address1 OR 
    USC.Address2 <> SC.Address2 OR 
    USC.AuthorizedDealer <> SC.AuthorizedDealer OR 
    USC.City <> SC.City 
    ) 
+0

'= 18 USC.ManufacturerID AND SC.ManufacturerID = 18 AND USC.CustomerNumber IN(ManufacturerID = 18 StagingCustomers FROM SELECT CustomerNumberの)' これは単にUSC.ManufacturerID =は異なる結果を生成してい18? CustomerNumberとManufacturerIDに参加しているので、重複しているようです。もっとあなたの質問をしてください。どのテーブルを更新しようとしていますか? – cadrell0

+0

は、私が推測するように、おそらく必要ない安全なガードとして追加されました。 UpdateStagingTablesの値でStagingCustomersテーブルを更新しようとしています – Slee

+0

Davidの答えが正しいです。 – cadrell0

答えて

2

をバックトランザクション。

UPDATE StagingCustomers 
SET Address1 = USC.Address1, 
    Address2 = USC.Address2, 
    AuthorizedDealer = USC.AuthorizedDealer, 
    City = USC.City 
FROM UpdateStagingCustomers AS USC 
JOIN StagingCustomers AS SC 
ON USC.CustomerNumber = SC.CustomerNumber 
AND USC.ManufacturerID = SC.ManufacturerID 
WHERE USC.ManufacturerID=18 AND SC.ManufacturerID = 18 
    AND USC.CustomerNumber IN(
     SELECT CustomerNumber FROM StagingCustomers WHERE ManufacturerID=18 
    ) 
    AND 
    (
    USC.Address1 <> SC.Address1 OR 
    USC.Address2 <> SC.Address2 OR 
    USC.AuthorizedDealer <> SC.AuthorizedDealer OR 
    USC.City <> SC.City 
    ) 
+0

don; t私のUPDATE StagingCustomersにwhere句が必要ですか? – Slee

+0

SQLはスマートで、StagingCustomersから選択していることがわかり、選択したレコードが更新されます。ちょっとメモしておいて、私は 'FROM'テーブルを' UPDATE'テーブルとマッチさせる方がはっきりしていると思いますが、同じ結果が得られます。 – cadrell0

+0

FROM句がSELECT文で探しているレコードを取得する限り、同じFROM句はUPDATEに入り、UPDATEの後にリストされたテーブルで変更されます。 –

関連する問題