根据同一用户在另一个表中的记录数,为用户更新一个表中的列,而无需使用光标

时间:2018-07-27 22:42:11

标签: sql

我有2个表A和B。我需要根据已定义的规则,根据userid在另一个表中具有的记录数,为所有userid更新表A中的列。如果另一个表中的记录数是3并且是该用户ID所必需的,则将IsCorrect标记为1,否则标记为0,如果计数是2且需要的是5,则将IsCorrect标记为0。以下是我要实现的目标

表A

UserID |  Required  |  IsCorrect
----------------------------------
1      |     SO;GO;PE       |     1
2      |     SO;GO;PE;PR       |     0
3      |     SO;GO;PE       |     1

表B

UserID  |  PPName
-----------------------   
1     |     SO
1     |     GO
1     |     PE
2     |     SO
2     |     GO
3     |     SO
3     |     GO
3     |     PE  

我尝试在连接另一张表的表中使用Update,但是无法使用其中的一个。另外,由于其开销,也不想使用游标。我知道我必须为此规则创建一个存储过程,但是我要寻找的是如何在不使用游标的情况下将userID传递给它。

感谢您的帮助。抱歉,无法正确格式化表格:)

2 个答案:

答案 0 :(得分:0)

这回答了原始问题。

嗯,您可以使用相关子查询和一些case逻辑:

update a
    set iscorrect = (case when required <=
                               (select count(*) from b where b.userid = a.userid)
                          then 1 else 0
                     end);

答案 1 :(得分:0)

update A
set IsCorrect = case
    when Required <= (select count(*) from B where b.UserID = A.UserID)
    then 'Y' -- or 0, or whatever sense is appropriate
    else 'N'
end