2012-03-13 12 views
0

は、私は2つのテーブルを持っています。SQLテーブルへの更新、インデックスなし

[e-mail]をリンクする唯一の方法は、社会保障番号がないためDIM_Staff.[Name]FACT_Sales.[Name]です。

私はすでに両方の表に間違っているかどうかチェックしています。

これは私がこれまでにしようとしているものです:

UPDATE [vdb].[dbo].[FACT_Sales] 
SET [e-mail] = (SELECT [e-mail] FROM DIM_Staff WHERE [Name] = [dbo].[FACT_Sales].[Name]) 


UPDATE [vdb].[dbo].[FACT_Sales] 
SET [e-mail] = (SELECT [e-mail] FROM DIM_Staff WHERE [Name] in (SELECT [Name] FROM [dbo].[FACT_Sales]) 

エラーメッセージ:

メッセージ512、レベル16、状態1、行1
サブクエリは複数の値を返しました。 =、!=、<、< =、>>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。ステートメントは終了されました。

かなり基本的なアップデートですか?

答えて

2

はfollwoing

UPDATE t 
SET t.[e-mail] = t2.[e-mail] 
from [vdb].[dbo].[FACT_Sales] t 
inner join DIM_Staff t2 
on t.Name = t2.Name 
+0

ニースビクラムを試してみてください!!魅力として働く、ありがとう:) – AceAlfred

0

DIM_Staffに同じ名前を持つ人がいますが、まずそれを解決する必要があります。

0

それが有効

ない

set email = val1, val2, val3

を行うと同類になるのでそれで、あなたはそのクエリを実行することはできません、私はそれがあるDBMSのかわからないんだけど、PostgreSQLでMySQLでは、内部結合を介して更新を行うことができます。条件に合致しないすべての行が除外され、単純にそのように更新できます。

選択クエリで開始し、必要な値を取得してから、更新ステートメントに変更します。

関連する問題