ORACLE - обновление значения из двух разных столбцов в разных таблицах с помощью фильтра - PullRequest
0 голосов
/ 10 октября 2018

У меня небольшой вопрос по поводу запроса.Я должен обновить столбец из таблицы, где есть только запись расходов (целое число).Я должен увеличить расходы на 5%, если клиент находится в определенном состоянии, столбец состояния находится в другой таблице и общим ключом является адрес.

Это мой запрос ниже:

UPDATE table 1 a
SET expense_vl = (
SELECT expense*1.05 FROM table 1
LEFT JOIN table2 b  ON b.ADDRESS_ID=a.ADDRESS_ID
WHERE description_state IN 'lollyland'
)

Ответы [ 4 ]

0 голосов
/ 10 октября 2018

Я бы рекомендовал использовать полусоединение:

update table_1 a
set expense_v1 = expense * 1.05
where exists (
  select null
  from table2 b
  where
    a.address_id = b.address_id and
    b.description_state = 'lollyland'
)

Хотя я должен добавить, что было бы полезно, если бы вы включили DDL для своей таблицы.Мы как-то угадываем, откуда взялась таблица «description».

Также, по возможности, включайте выборочный ввод для каждой таблицы и желаемый вывод.Нам не нужен миллион записей, только пример, иллюстрирующий вашу проблему.

0 голосов
/ 10 октября 2018

Или попробуйте с подвыбором:

UPDATE table1
   SET expense_vl =  expense*1.05
 WHERE ADDRESS_ID IN (SELECT ADDRESS_ID FROM table2 WHERE description_state IN 'lollyland')
0 голосов
/ 10 октября 2018

Я думаю, вам нужно изменить свой запрос, как показано ниже:

 UPDATE table 1 A
    SET expense_vl=expense*1.05 FROM table 1
    LEFT JOIN table2 B ON B.ADDRESS_ID=A.ADDRESS_ID
    WHERE B.description_state IN 'lollyland'
0 голосов
/ 10 октября 2018

Попробуйте ниже

UPDATE table1 a SET expense_vl = (SELECT expense*1.05
                                  FROM table2 b
                                  WHERE b.ADDRESS_ID=a.ADDRESS_ID)
WHERE description_state IN 'lollyland'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...