【问题标题】:Subquery returned more than 1 value not allowed when the subquery is used as an expression当子查询用作表达式时,子查询返回的值不允许超过 1 个
【发布时间】:2019-04-24 02:06:26
【问题描述】:

我的目标是从一个表中获取数据并在另一个表中更新它。我正在执行显式连接并运行下面的查询。

UPDATE [Users] set
  name = (
    SELECT concat(Column1,' ',Column2) 
    from [Table2] 
    inner join [Users] on Name = Column3
    where Name like 'ABC'
  )

运行上述查询时出现以下错误:

消息 512,第 16 级,状态 1,第 45 行
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

请注意 Column1、Column2、Column3 是表 2 独有的,因此我没有添加限定符。

【问题讨论】:

  • 你想如何解决这个问题?您的匹配条件返回多条记录,因此您需要改进匹配条件以将其减少到一条记录。
  • 我想更新列中与表 2 中的相应值指定的条件匹配的所有行。返回 1 值如何工作?
  • 您目前没有考虑更新表的哪一行要更新的条件。提供的答案类型解决了这个问题。但是,如果您的查询返回多行,这意味着 Name/Column3 不是唯一的。确实需要提供一个 MVCE (stackoverflow.com/help/mcve) 示例。

标签: sql sql-server


【解决方案1】:

你可以尝试使用UPDATE... JOIN

UPDATE  t1 set
  name = concat(Column1,' ',Column2) 
FROM [Users] t1 JOIN [Table2] on Name = Column3
where Name like 'ABC' 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多