获取 "Subquery returned more than 1 value" 错误 运行 更新查询

Getting "Subquery returned more than 1 value" error running update query

请客气,我正在尝试更新 sql 服务器中的查询,但遇到错误。这是我在同一数据库中的两个 tables 和下面提供的查询,我的要求是根据 table1 更新 table2 中的列 groupCode 但我面临以下问题错误:

错误

Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.

Table 1

**Dept**    **DeptCode**    **GroupName**   **GroupCode**
IT      32      Login-Els       1
IT      32      QC-Els          4
CT      20      Login-OUP       1
CT      20      XML-OUP         2
CT      20      QC-OUP          4
MECH    34      Login-CEN       1
MECH    34      XML-CEN         2
MECH    34      PAGINATION-CEN  3
MECH    34      QC-CEN          4

Table2

**Activity**    **DeptCode**    **Group**
Login-Els       32      NULL
QC-Els          32      NULL
Login-OUP       20      NULL
XML-OUP         20      NULL
QC-OUP          20      NULL
Login-CEN       34      NULL
XML-CEN         34      NULL
PAGINATION-CEN  34      NULL
QC-CEN          34      NULL

SQL

update db1..Activity set 
Groupcode = (
                select groupcode 
                from db1..Groups 
                where DeptCode=32 
                    and Groupname = (
                                     select activity 
                                     from db1..Activity 
                                     where DeptCode=32
                                    )
             )

错误只是提示你内部查询return不止一个值 因此 sql 得到 confused.so 防止我使用 top cluase

的多重值

试试这个..

update db1..Activity set 
Groupcode =(select top 1 groupcode from db1..Groups where DeptCode=32 and 
Groupname =(select top 1 activity from db1..Activity where DeptCode=32))

您必须始终更新,以便内部 select 始终 returns 一行。您的示例与示例 tables 并不完全匹配,但也许这就是您想要的:

update
  Table2
set
  Group = (
    select
      GroupCode
    from
      table1
    where
      table1.DeptCode = table2.DeptCode and
      table1.GroupName = table2.Activity
  )

这部分真的没有意义:

Groupname =(select activity from db1..Activity where DeptCode=32))

因为您正在尝试从自身更新 table,如果确实如此,那么您可以使用:

update table2 set GroupName = Activity

不使用任何内部 selects。

该错误消息表明您的一个或两个子查询返回了多行。这是不允许的,因为您将子查询用作 = 的操作数。修复错误的一种可能方法是将 TOP 1 添加到每个子查询。

完成此类更新任务的另一种可能方法是使用 UPDATE ... FROM ... JOIN 语法,如下所示:

UPDATE Activity
SET Groupcode = G.groupcode
FROM Activity A
    INNER JOIN Groups G 
        ON A.activity = G.Groupname
           AND A.DeptCode = G.DeptCode
WHERE A.DeptCode = 32