首页 > 解决方案 > 根据另一个表更新一个表中的数据

问题描述

我的问题相对简单,但我正在寻找最好的方法。

我的数据库中有 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。

标签: sql-server

解决方案


如果您想使用前 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   

推荐阅读