sql - 根据同一用户在另一个表中的记录计数为用户更新一个表中的列,而不使用游标
问题描述
我有 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 传递给它是我正在寻找的。
谢谢您的帮助。抱歉没有正确格式化表格:)
解决方案
这回答了最初的问题。
嗯,您可以使用相关子查询和一些case
逻辑:
update a
set iscorrect = (case when required <=
(select count(*) from b where b.userid = a.userid)
then 1 else 0
end);
推荐阅读
- web-services - 使用 Google Places 获取指定区域中一种类型的总 os 位置
- sql - SQL查询根据前几行计算表
- c++ - WIN32 - 同步创建 WebView2 不起作用 - 我的集成 Web 浏览器没有白色矩形
- javascript - 单词匹配时使用 imdb api 显示工具提示
- ios - 需要了解如何为我的应用实施自动续订订阅
- caching - 清除 jupyter notebook 的缓存
- amazon-s3 - 对于 Digital Ocean 的“Apps”,除了“Spaces”,还有没有办法在服务器上存储数据?
- python - 使用 Python 重命名文件以消除日期和时间
- java - 端口超出范围:-1。无法通知构建侦听器
- java - Springboot 集成 - 在 MessageHandler 中访问标头