【问题标题】:How to update column in table from two different tables USING DML Command如何使用 DML 命令从两个不同的表中更新表中的列
【发布时间】:2020-02-26 08:51:10
【问题描述】:

我这里有三个不同的表:

df_umts_relation表:

|---------------------|------------------|---------------------|------------------|------------------|
|      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        |                  |                  |
|---------------------|------------------|---------------------|------------------|------------------|

所以现在我想从下面的两个表格中更新target_ops_num

df_umts_carrier 表,因为该表包含我想要处理的那些列,并且还包含一些整数值:

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

因为我有另一张桌子叫df_gsm_carrier:

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

所以我只需要更新[MyNewDatabase].[dbo].[df_umts_relation].[target_ops_num] CASE WHEN technologyis UMTS 然后从表更新df_umts_carrier ELSE technologyGSM 然后从df_gsm_carrier 更新n_cell_name = @ 987654336@ 和 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]

那么有人知道如何解决这个问题吗?

【问题讨论】:

  • 请添加数据库标签。谢谢!
  • @VBoka 编辑感谢您的关注 :)
  • 你速度很快,很好。但我想要的是:Oracle、MySQL、Postgresql、SQLServer....其中之一
  • @VBoka 更新了它的 sql-server express :)
  • df_umts_carrier 和 df_gsm_carrier 中是否有日期?请更新一两个值以查看?谢谢!

标签: sql sql-server database dml


【解决方案1】:

请检查这是否有帮助。

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

【讨论】:

    猜你喜欢
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多