Как обновить столбец в таблице из двух разных таблиц, используя команду DML - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть три разные таблицы:

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 таблица, так как эта таблица содержит те столбцы thow, над которыми я хочу работать, а также содержит некоторые целочисленные значения:

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

, поскольку у меня есть другая таблица с именем df_gsm_carrier:

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

Так что все, что мне нужно, я хочу обновить [MyNewDatabase].[dbo].[df_umts_relation].[target_ops_num] СЛУЧАЙ, КОГДА technology - UMTS, затем обновить из таблицы df_umts_carrier ИЛИ 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]

Значит, у кого-нибудь есть идеи, как решить эту проблему?

1 Ответ

1 голос
/ 26 февраля 2020

Пожалуйста, проверьте, поможет ли это.

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)

Вот демоверсия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...