2012-03-13 34 views
0

我有兩個表:DIM_StaffFACT_SalesSQL - 更新表,沒有索引

我想從DIM_Staff更新[e-mail]FACT_Sales

鏈接[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 2012-03-13 10:39:38

0

這是,但你有DIM_Staff中的人共享相同的名稱。你需要先解決。

0

所以,你不能這樣做,查詢,因爲這將是類似於做

set email = val1, val2, val3

這是無效的

我不知道那是什麼DBMS,但在PostgreSQL的和MySQL你應該可以通過內部連接進行更新,這樣,所有不符合條件的行都被排除,你可以按照這種方式進行更新。

從選擇查詢開始,得到您想要的值,然後將其更改爲更新語句。