运行SQL Server嵌套UPDATE查询时出错

时间:2012-01-11 21:05:00

标签: sql-server-2008 sql-update

我试过在论坛中寻找答案,但找不到任何可以帮助我的答案。

我的情况是我有2个表,并且必须根据另一个表中的ID更新一个表中的电子邮件。

我的问题是我正在尝试运行更新查询,并收到此错误:

  

Msg 512,Level 16,State 1,Line 1 Subquery返回的值超过1   值。当子查询遵循=,!=,<,< =,

时,不允许这样做      
    

,> =或当子查询用作表达式时。

  

我知道为什么我收到此错误,但我无法简化查询。可以帮助吗?

UPDATE A
SET    Email = (SELECT B.[Email Address]
                FROM   B
                WHERE  B.ID IN (SELECT ID
                                FROM   A
                                WHERE  Email LIKE 'abc@def.ghi'))
WHERE  A.ID IN (SELECT ID
                FROM   A
                WHERE  Email LIKE 'abc@def.ghi')  

有人可以建议我如何继续吗?

2 个答案:

答案 0 :(得分:1)

不确定您拥有哪种表格结构以及您希望实现的目标。

如果我猜对了,你可以尝试这样的事情:

UPDATE A SET Email = (SELECT [Email Address] FROM B WHERE B.ID = A.ID)
WHERE Email = 'abc@def.ghi';

这是你想要的(也就是说,将A的电子邮件字段设置为等于B的B的[电子邮件地址]与A的ID匹配)?

答案 1 :(得分:1)

如果我理解正确,我认为你可以这样:

 UPDATE AAlias
 SET
    Email = AAlias.EmailAdd
 FROM
     A AAlias
 INNER JOIN B AAlias
     ON AAlias.ID = BAlias.ID AND A.Email LIKE 'BLAH BLAH'

希望这会有所帮助!!