2017-11-09 14 views
-2

私は2つのテーブルを持っています。表1は、さまざまな個人用の列を備えた基本的な「連絡先」形式の表です。表1のフィールドの1つは、表2を参照するルックアップ列です。新しい列を作成するか、表2の実際のルックアップ値を使用して表1に空の列を設定します。これを行う最も効率的な方法は何ですかMSSQLでは、処理時間、つまり多数の行について最小化されていますか?ルックアップ値を使用するテーブルを逆正規化しますか?

+0

をバックアップを持っており、あなたの質問は何ですか? – Blorgbeard

+2

@CurtisWhite、3kの評判で私はあなたが尋ねる方法を知っているが、持っているだろう。サンプルデータと希望する結果を提供してください。私はこの感覚を理解できません "新しい列を作成するか、表1に空の列を設定したい" – Alex

答えて

0

次のコードは動作します:

update dbo.MyContacts 
    set StateAbbreviation = S.StateAbbreviation 
    from dbo.MyContacts C 
inner 
    join States S 
    on C.State = S.StateId 
0

正しい構文は次のようになります。

update c 
    set StateAbbreviation = S.StateAbbreviation 
    from dbo.MyContacts C inner join 
     States S 
     on C.State = S.StateId; 

updateの別名の使用に注意してください。テーブル名を使用すると、更新中のテーブルとFROM句で参照されているテーブルの間にリンクがないため、テーブル内のすべての行が任意の値で更新されます。

+0

しかし、すべての行を更新したかった。ヌルのエイリアスですか?私が従うかわからない私の場合、フィールドはnullではありません。 –

+0

@CurtisWhite。 。 。私はその考えを終わらせなかったことを実感します。 –

1

使用するファクトは多くありませんが、新しい列を追加した後に、その列に値を設定するためにcteを使用できます。

ALTER TABLE table1 
ADD newcol varchar(50); 

WITH 
     cte AS (
        SELECT 
         table1.id 
         , table1.newcol 
         , table2.name AS newcol_value 
        FROM table1 
        INNER JOIN table2 ON table1.table2_fk = table2.id 
      ) 
UPDATE cte 
SET newcol = newcol_value 
; 

私の推測では、あなたは、これはどこかで、パフォーマンスを向上させることを望んでいるが、あなたは今、他の方法であなたの費用がかかります。この新しい列を維持する必要があります。

注意:最初にそれをテストするなど、

+0

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、[** Click The Tick **](https://ibb.co/ikqyO6) –

関連する問題