使用子查询更新查询

时间:2021-05-04 13:03:53

标签: sql sql-server

我想更新一个表中的字段 TicketUser,其中记录是从另一个表中获取的字段 CreatedBy

我面临以下错误:

消息 512,级别 16,状态 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 

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

与错误一样,您的子查询返回了多个值,无法正确执行更新。我不确定您要寻找的最终结果,但是您可以通过将 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

答案 1 :(得分:0)

我怀疑您想要一个相关子查询,而不是子查询中的 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;

答案 2 :(得分: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
相关问题