2011-10-21 2 views
0

実際に更新クエリでいくつかのヘルプを使用できます...(SQL Serer 2008 R2 Express) 2つのテーブルtblJPtblMasterがあります。文字列フィールドでのSQLテーブルの照合の試行

私は、2つのテーブルの間で一致する文字列フィールドしか持っていません。私はtblMaster.Long_texttblJP.LangStringを更新する必要が

tblJP AND tblMaster 

tblJP.short_text = tblMaster.short_text AND tblMaster.Lang = 'jp' 

任意の助けいただければ幸いとき。私はすべての種類のロジックと構文を試して、テンポラリテーブルを作って他のタイプのジョイントに運がないようにしています。

答えて

6

INNER JOINの簡単なアップデートでは、このトリックを行う必要があります。

UPDATE  tblJP 
SET  tblJP.LangString = tblMaster.Long_Text 
FROM  tblJP 
INNER JOIN tblMaster ON tblMaster.alt_text = tblJP.short_text 
WHERE  tblMaster.Lang = 'jp' 

WARNING:最初の開発サーバに対してそれをテストすることなく、本番サーバーに対してUPDATEステートメントを実行することはありません - 他の誰かがSQLを書いた場合は特に。

+0

1エラーで問題が通知される複数の行を返したときにMERGE

MERGE INTO tblJP USING (SELECT * FROM tblMaster WHERE Lang = 'jp') AS SOURCE ON SOURCE.alt_text = tblJP.short_text WHEN MATCHED THEN UPDATE SET LangString = SOURCE.Long_Text; 

を使用することができます!これは、結合から一致する行が2つ以上ある場合に不確定な結果を引き起こす可能性があります( 'merge'で回避される問題) –

+1

Jamesの警告に関して:私は' BEGIN TRANSACTION'を使って更新ステートメントを開始し、 - COMMIT'。それから私は影響を受ける行の数をチェックして、それが私が期待しているものならば選択し、F5をコミットします。 (これはデータの変更を検証しませんが...) –

+0

それは完璧に働いてくれてありがとう。 – htm11h

1

またJOINあなたは免責事項The MERGE statement attempted to UPDATE or DELETE the same row more than once.

+0

これを投稿していただきありがとうございます。私はあなたのコメントを見ましたが、前に 'MERGE'を使ったことはありませんでしたので、私はそれを私の答えにどのように組み込むのか分かりませんでした。 –

関連する問題