SQL-更新到表,无索引

SQL-更新到表,无索引,sql,sql-update,Sql,Sql Update,我有两张表:DIM\u Staff和FACT\u Sales 我想将[e-mail]从DIM\u员工更新到FACT\u Sales 链接[电子邮件]的唯一方法是通过DIM\u Staff.[Name]和FACT\u Sales.[Name],因为没有社会保险号码 我已经检查了这两个表格,以检查拼写错误 这就是我迄今为止所尝试的: UPDATE [vdb].[dbo].[FACT_Sales] SET [e-mail] = (SELECT [e-mail] FROM DIM_Staff WHER

我有两张表:
DIM\u Staff
FACT\u Sales

我想将
[e-mail]
DIM\u员工
更新到
FACT\u Sales

链接
[电子邮件]
的唯一方法是通过
DIM\u Staff.[Name]
FACT\u 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])
错误消息:

Msg 512,第16级,状态1,第1行
子查询返回了多个值。当子查询遵循=、!=、>=或者当子查询用作表达式时。声明已终止


这应该是一个相当基本的更新吗?

是的,但你的DIM_员工中有人同名。您需要首先解决这个问题。

因此,您不能执行该查询,因为它类似于

set email=val1、val2、val3

这是无效的

我不确定这是什么dbms,但在PostgreSQL和MySQL中,您应该能够通过内部连接进行更新,这样,所有不符合条件的行都被排除,您可以简单地通过这种方式进行更新

从select查询开始,获取所需的值,然后将其更改为update语句。

尝试以下操作

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