Sql 基于同一用户在另一个表中的记录数(不使用游标)为用户更新一个表中的列
我有两个表A和表B。我需要根据userid在另一个表中的记录计数,根据定义的规则更新表A中所有userid的一列。如果另一个表中的记录计数为3且该用户ID需要,则将IsCorrect标记为1,否则为0;如果计数为2且必需为5,则IsCorrect标记为0,例如,下面是我试图实现的目标 表ASql 基于同一用户在另一个表中的记录数(不使用游标)为用户更新一个表中的列,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
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=(需要时为caseupdatea
设置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