【发布时间】: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 technology 是GSM 然后从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