【问题标题】:Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, etc子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、> 等时,这是不允许的
【发布时间】:2017-03-10 08:18:57
【问题描述】:

我有一个必须在表 (tbl_two) 中更新的列,它引用另一个表 (tbl_one) 中的 ID。

我当前的更新语句如下所示:

UPDATE tbl_two
SET col_idnum = 
   (SELECT tbl_one.col_enrollmentid FROM dbo.tbl_one 
        JOIN dbo.tbl_two ON tbl_one.appid = tbl_two.appid
        WHERE tbl_two.programid = 132
        AND tbl_one.isfirst = 1
        AND tbl_one.programtypeid = 132)
WHERE col_programid = 132

这会引发错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

嵌套的 select 语句仅返回列(tbl_one.col_enrollmentid),但它确实返回 47,804 行结果。这是它应该返回的。这就是预期的结果。

我在这里搜索了解决方案,但我发现的只是使用IN 语句来处理= 语句,但我认为不可能使用“IN”语句执行更新.

谁能帮我解决 SQL Server 2008 中的这个查询?

提前致谢

【问题讨论】:

  • 什么你试图将列值设置为?您不能将单个列值设置为 48,000 个结果。请使用一小组数据来说明您要做什么。

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

使用连接..

UPDATE  t2
SET col_idnum = t1.col_enrollmentid 
from
dbo.tbl_one t1
JOIN dbo.tbl_two t2
 ON tbl_one.appid = tbl_two.appid
        and  t1.programid = 132
        AND t1.isfirst = 1
        AND t2.programtypeid = 132

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2016-08-02
    • 2019-10-13
    • 1970-01-01
    相关资源
    最近更新 更多