获取 "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
请客气,我正在尝试更新 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