Sql 基于同一用户在另一个表中的记录数(不使用游标)为用户更新一个表中的列

Sql 基于同一用户在另一个表中的记录数(不使用游标)为用户更新一个表中的列,sql,Sql,我有两个表A和表B。我需要根据userid在另一个表中的记录计数,根据定义的规则更新表A中所有userid的一列。如果另一个表中的记录计数为3且该用户ID需要,则将IsCorrect标记为1,否则为0;如果计数为2且必需为5,则IsCorrect标记为0,例如,下面是我试图实现的目标 表A UserID | Required | IsCorrect ---------------------------------- 1 | SO;GO;PE | 1

我有两个表A和表B。我需要根据userid在另一个表中的记录计数,根据定义的规则更新表A中所有userid的一列。如果另一个表中的记录计数为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连接另一个表,但无法找到一个。另外,由于其开销,不希望使用游标。我知道我必须为规则创建一个存储过程,但是如何在没有游标的情况下将用户ID传递给它是我要寻找的


谢谢你的帮助。对表格格式不正确表示歉意:)

这回答了原来的问题

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

update a
    set iscorrect = (case when required <=
                               (select count(*) from b where b.userid = a.userid)
                          then 1 else 0
                     end);
更新a
设置iscorrect=(需要时为case
updatea
设置IsCorrect=case

当需要时,用您正在使用的数据库标记您的问题。谢谢Shawn…现在是一个细微的更改..如果所需列实际上是一个需要比较的值字符串,我是否仍要使用Case?谢谢Gordon…现在是一个细微的更改..如果所需列实际上是一个需要比较的值字符串,我是否仍要使用Case跟Case一起去?@VaibhavDhore…那将是一个新问题。这回答了你最初提出的问题。一个新问题应该作为一个新问题来提出。
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