如何使用 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 technology
is UMTS
then update from table df_umts_carrier
ELSE technology
是 GSM
然后从 df_gsm_carrier
更新到 n_cell_name
= cell_name_umts
和 n_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)
我这里有三个不同的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 technology
is UMTS
then update from table df_umts_carrier
ELSE technology
是 GSM
然后从 df_gsm_carrier
更新到 n_cell_name
= cell_name_umts
和 n_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)