繁体   English   中英

使用子查询更新查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM