如何使用 DML 命令从两个不同的 table 更新 table 中的列

How to update column in table from two different tables USING DML Command

我这里有三个不同的table:

df_umts_relation table:

|---------------------|------------------|---------------------|------------------|------------------|
|      cell_name      |     n_cell_name  |    technology       |   source_ops_num |   target_ops_num |     
|---------------------|------------------|---------------------|------------------|------------------|
|       121           |       221        |         UMTS        |         1        |                  |                  |
|---------------------|------------------|---------------------|------------------|------------------|
|       122           |       222        |         GSM         |         2        |                  |                  |
|---------------------|------------------|---------------------|------------------|------------------|
|       123           |       223        |         UMTS        |         3        |                  |                  |
|---------------------|------------------|---------------------|------------------|------------------|
|       124           |       224        |         GSM         |         4        |                  |                  |
|---------------------|------------------|---------------------|------------------|------------------|
|       125           |       225        |         GSM         |         5        |                  |                  |
|---------------------|------------------|---------------------|------------------|------------------|
|       126           |       226        |         UMTS        |         6        |                  |                  |
|---------------------|------------------|---------------------|------------------|------------------|
|       127           |       227        |         UMTS        |         7        |                  |                  |
|---------------------|------------------|---------------------|------------------|------------------|

所以现在我想从下面的两个 tables

更新 target_ops_num

df_umts_carrier table 因为这个 table 包含我想要处理的那些列并且还包含一些整数值:

|---------------------|------------------|
|      opsnum_umts    |  cell_name_umts  |     
|---------------------|------------------|

因为我有另一个 table 叫 df_gsm_carrier:

|---------------------|------------------|
|      opsnum_gsm     |  cellname        |     
|---------------------|------------------|

所以我只需要更新 [MyNewDatabase].[dbo].[df_umts_relation].[target_ops_num] CASE WHEN technologyis UMTS then update from table df_umts_carrier ELSE technologyGSM 然后从 df_gsm_carrier 更新到 n_cell_name = cell_name_umtsn_cell_name = cellname

所以我尝试创建一个查询,因为下面的查询只适用于一个条件,它更新了仅 UMTS 的行:

UPDATE [MyNewDatabase].[dbo].[df_umts_relation]
SET [MyNewDatabase].[dbo].[df_umts_relation].[target_ops_num] = [MyNewDatabase].[dbo].[df_umts_carrier].[opsnum_umts]
FROM [MyNewDatabase].[dbo].[df_umts_relation]
INNER JOIN [MyNewDatabase].[dbo].[df_umts_carrier]
ON [n_cell_name] = [cell_name_umts]

并且工作正常但不更新包含 GSM...

的行

在其他方面,我尝试创建一个查询来处理这个问题,但它没有更新 GSM 部分并且需要很长时间:

UPDATE [MyNewDatabase].[dbo].[df_umts_relation]
SET [MyNewDatabase].[dbo].[df_umts_relation].[target_ops_num] = (CASE WHEN [MyNewDatabase].[dbo].[df_umts_relation].[technology] = 'UMTS' 
THEN [MyNewDatabase].[dbo].[df_umts_carrier].[opsnum_umts] ELSE [MyNewDatabase].[dbo].[df_gsm_carrier].[opsnum_gsm] END)
FROM [MyNewDatabase].[dbo].[df_umts_relation]
LEFT JOIN [MyNewDatabase].[dbo].[df_umts_carrier]
ON [n_cell_name] = [cell_name_umts]
LEFT JOIN [MyNewDatabase].[dbo].[df_gsm_carrier]
ON [n_cell_name] = [cell_name]

所以有人知道如何解决这个问题吗?

请检查这是否有帮助。

update df_umts_relation
set target_ops_num = ( select case when dur.technology = 'UMTS' then du.cell_name_umts
                                   when dur.technology = 'GSM' then dg.cellname
                              end
from df_umts_relation dur
left join df_umts_carrier du on  dur.n_cell_name = du.opsnum_umts
left join df_gsm_carrier dg on dur.n_cell_name = dg.opsnum_umts
where dur.id= df_umts_relation.id)

Here is a demo