sql-server - 根据另一个表更新一个表中的数据
问题描述
我的问题相对简单,但我正在寻找最好的方法。
我的数据库中有 3 个表:New_Training、Old_Training 和 Conversion。它们的结构如下:
New_Training
User_Nr NewTraining_Nr
112233 10
223344 10
445566 11
Conversion
NewTraining_Nr OldTraining_Nr
10 8430
10 8650
10 8900
11 9430
11 9500
Old_Training (This is how it should look)
User_Nr OldTraining_Nr OldTrainingNr_Lvl
112233 8430 1
112233 8650 1
112233 8900 1
223344 8430 1
223344 8650 1
223344 8900 1
445566 9430 1
445566 9500 1
我想编写一个 SQL 脚本来检查 New_Training 表以查看是否有用户以及他们关联了哪些 NewTraining_Nr,使用转换表将 NewTraining_Nr 转换为 OldTraining_nr,并将值 1 插入到对应的 OldTraining_Nr 的 OldTrainingNr_Lvl 列中该用户,更新表。
如果用户是新用户(在 New_Training 内),则应将 User_Nr 以及相应的 OldTraining_Nr 和级别 1 添加到 Old_Training 表中。
这个脚本应该是动态的,因为它不应该依赖于 User_nr,而是循环遍历 New_Training 表中的 User_Nr。
解决方案
如果您想使用前 2 个表的结果插入到您的第 3 个表中,那么就可以了
declare @New_Training table (User_Nr int, NewTraining_Nr int)
declare @Conversion table (NewTraining_Nr int, OldTraining_Nr int)
declare @Old_Training table (User_Nr int, OldTraining_Nr int, OldTrainingNr_Lvl int)
insert into @New_Training (User_Nr, NewTraining_Nr)
values (112233, 10), (223344, 10), (445566, 11)
insert into @Conversion (NewTraining_Nr, OldTraining_Nr)
values (10, 8430), (10, 8650), (10, 8900), (11, 9430), (11, 9500)
insert into @Old_Training (User_Nr, OldTraining_Nr, OldTrainingNr_Lvl)
select nt.User_Nr,
c.OldTraining_Nr,
1
from @New_Training nt
left join @Conversion c on nt.NewTraining_Nr = c.NewTraining_Nr
select * from @Old_Training
这将产生这个结果
User_Nr OldTraining_Nr OldTrainingNr_Lvl
------- -------------- -----------------
112233 8430 1
112233 8650 1
112233 8900 1
223344 8430 1
223344 8650 1
223344 8900 1
445566 9430 1
445566 9500 1
推荐阅读
- javascript - CheckBoxes React Native Map 函数返回错误:重新渲染太多。React 限制渲染次数以防止无限循环
- vue.js - 在 src 更改时用占位符替换图像
- vue.js - Nodemailer:找不到模块“net”+ nodemailer.createTransport 不是函数
- python - 运行 brew doctor 显示我安装了 7 个不同的 python“配置”脚本。我如何摆脱它们,以便我不再收到此警告?
- swift - 选择 Datepicker 单元格时禁用 tableView
- python - Python 项目的专业代码模板 - 包括模块、包、单元测试、API / 帮助 - IDE
- winapi - 内存不足 WinAPI
- android - 未在 AlarmManager onReceive() 方法中获取用户定义的 Arraylist
- python - 使用条件等级字母排序
- graphql - 为什么当父解析器返回 null/undefined 时,graphql-js 执行器停止解析具有自己解析器的子字段?