【问题标题】:Error while running SQL server nested UPDATE query运行 SQL Server 嵌套 UPDATE 查询时出错
【发布时间】:2012-01-11 21:05:00
【问题描述】:

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

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

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

消息 512,级别 16,状态 1,第 1 行子查询返回超过 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')  

谁能建议我如何进行?

【问题讨论】:

  • 子查询返回多个值。您可以尝试添加DISTINCT,但这只有在所有值都相同的情况下才有效。如果他们不是应该使用哪个电子邮件地址?
  • 我在表 A 中有一组由“abc@def.ghi”覆盖的电子邮件,如果电子邮件 abc@def.ghi 是表中的电子邮件,我需要使用表 B 中的电子邮件进行更新答:这是我能想到的最好的。我是 sql 查询的新手。任何帮助或任何思想方向将不胜感激。表 A 中有大约 300 个电子邮件 ID,地址为 abc@def.ghi。
  • 感谢马丁的建议。我会记住它以备将来使用。

标签: sql-server-2008 sql-update


【解决方案1】:

不太确定你有什么表结构以及你想要实现什么。

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

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

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

【讨论】:

  • 感谢 Seramme,这看起来像是我一直在寻找的解决方案。并感谢您纠正我的错误。感谢大家在这么短的时间内帮助我。
【解决方案2】:

如果我理解正确,我想你可以像下面这样:

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

希望这会有所帮助!

【讨论】:

  • 感谢 praveen 的回复,但这不是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多