[英]Update Query using Subquery
我想在一个表中更新我的字段TicketUser
,在该表中,记录是从另一个表中获取的,字段CreatedBy
。
我面临以下错误:
消息 512,级别 16,State 1,第 16 行子查询返回超过 1 个值。 当子查询跟随 =, ,=, <, <=, > 时,这是不允许的。 >= 或当子查询用作表达式时。
我的查询如下:
UPDATE Incidence SET TicketUser = (select CreatedBy from AssignedRoles inner join Incidence on
Incidence.RegistrationID=AssignedRoles.RegistrationID
WHERE AssignedRoles.CreatedOn = Incidence.DateServed and TicketUser=0)
FROM Incidence INNER JOIN AssignedRoles on
AssignedRoles.RegistrationID=Incidence.RegistrationID
WHERE Incidence.RegistrationID = AssignedRoles.RegistrationID
我该如何解决这个问题?
与错误一样,您的子查询返回多个值,并且无法正确进行更新。 我不确定您要寻找的最终结果,但是您可以通过将TOP (1)
添加到您的子查询中来消除它,如下所示,可能使用ORDER BY
取决于您需要返回的内容。
UPDATE Incidence SET TicketUser = (select TOP(1) CreatedBy from AssignedRoles inner join Incidence on
Incidence.RegistrationID=AssignedRoles.RegistrationID
WHERE AssignedRoles.CreatedOn = Incidence.DateServed and TicketUser=0)
FROM Incidence INNER JOIN AssignedRoles on
AssignedRoles.RegistrationID=Incidence.RegistrationID
WHERE Incidence.RegistrationID = AssignedRoles.RegistrationID
我怀疑您想要一个相关的子查询,而不是子查询中的join
。 然后我想你只想更新0
值。 所以我推测这就是你想要的:
UPDATE Incidence
SET TicketUser = (select ar.CreatedBy
from AssignedRoles ar
where ar.RegistrationID = Incidence.RegistrationID and
ar.CreatedOn = Incidence.DateServed
)
WHERE TicketUser = 0;
我摆脱了加入,以下 SQL 脚本对我有用。
update incidence
set ticketuser = Assignedroles.createdby from Assignedroles inner join incidence on
Incidence.registrationID = Assignedroles.registrationid
where Incidence.registrationID = Assignedroles.registrationid and
Assignedroles.ModifiedOn = dateserved and incidence.ticketuser = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.