首页 > 解决方案 > 根据同一用户在另一个表中的记录计数为用户更新一个表中的列,而不使用游标

问题描述

我有 2 个表 A 和 B。我需要根据用户 ID 在另一个表中基于定义的规则的记录计数来更新表 A 中的所有用户 ID 的列。如果另一个表中的记录计数为 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  

我尝试在加入另一个表的表中使用更新,但无法使用一个。另外,不想使用游标,因为它的开销。我知道我必须为规则创建一个存储过程,但是如何在没有光标的情况下将用户 ID 传递给它是我正在寻找的。

谢谢您的帮助。抱歉没有正确格式化表格:)

标签: sql

解决方案


这回答了最初的问题。

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

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

推荐阅读