sql - 从另一个表更新行的存储过程
问题描述
关键是更新**(从 0 更改为 1)** 名册表(第 1 周,第 2 周,....第 16 周),当他使用电话号码登记时,来自 MHS 的 John doe。apptable 捕获创建日期列中的签入日期,该日期应等于周日期表中的第 1 周日期。
如果 John doe 应尝试从 JHS 签入,则名册表不应更新。查看图片以获得清晰和详细信息 当前状态:在此处输入图片描述 预期结果:在此处输入图片描述
名册表(当前状态)
UID Name School Participant1phone Participant2phone Week1 Week2
1 John Doe MHS 8324444444 8325555555 0 0
2 Nia Long JHS 6785555555 6784444444 0 0
工作日表:
SchoolUID School Week1 Week2
1 MHS 9/7/2020 9/14/2020
2 JHS 9/8/2020 9/15/2020
名册表(签到后的预期结果)
UID Name School Participant1phone Participant2phone Week1 Week2
1 John Doe MHS 8324444444 8325555555 1 1
2 Nia Long JHS 6785555555 6784444444 1 1
应用表
ID Userphonenumber Created on
1 8324444444 9/7/2020
2 6785555555 9/15/2020
这是到目前为止的sql查询:
create procedure updtroster
AS
begin
update roster
set roster.week = 1
from apptable a
left join roster on a.UserPhoneNumber = roster.Participant1phone
end;
解决方案
也许我错了,但我假设您使用的是 SQLServer ...
当您想根据另一个表中的数据更新一个表时,可以使用以下方式执行更新语句:
update roster
set roster.week = 1
from apptable a
left join roster on a.UserPhoneNumber = roster.Participant1phone;
有了它,就很容易将其放入程序中:
create procedure updtroster
AS
begin
update roster
set roster.week = 1
from apptable a
left join roster on a.UserPhoneNumber = roster.Participant1phone;
end;
如您所见,我只添加了我从您的问题中理解的连接条件。如果需要,您也可以添加其他条件。您可以将它放在 where 子句中,然后更新语句将如下所示:
update roster
set roster.week = 1
from apptable a
left join roster on a.UserPhoneNumber = roster.Participant1phone
where roster.some_column = getdate();
这是我为测试目的创建了两个表的演示。然后我测试了更新语句,然后我测试了程序。
推荐阅读
- oracle - Oracle 报告 REP-0820:无法导入指定的图像
- c - C 预处理器或 C++ 魔术自动为每个文件创建一个对象?
- python - 如何通过电子邮件或其他字段进行 Flask-Security 登录?
- msys2 - Msys2 包含的软件包
- apache - 如何在 Apache 配置中隐藏 URL 中的查询参数?
- python - 在 Eve 的 pre-put 回调中从数据库中获取项目的信息
- angular - TS2345:“RolesGuard”类型的参数不可分配给“CanActivate”类型的参数
- autosar - adaptive AUTOSAR - difference between function group and application?
- package - Installing Racket Packages without installing Dr Racket
- elasticsearch - 如何使用映射将符号映射到弹性搜索中的单词?