@Romario21

SQL запрос (UPDATE)?

Проблема с написанием UPDATE запроса.
Есть две таблицы: Контрагенты и Задачи контрагентов
Есть запрос вида:
SELECT account.Name,activity.Id,account.ModifiedOn 
FROM  Account account LEFT JOIN Activity activity ON activity.AccountId=account.Id  
WHERE account.TypeId='03a75490-53e6-df11-971b-001d60e938c6'  
  AND activity.Id IS NULL AND DATEDIFF(dd,account.ModifiedOn,GETDATE())>60

Этот запрос отображает список контрагентов, по которым дата последнего изменения больше 60 дней и не было задач.
Вопрос в том как модифицировать эти данные.
UPDATE Account 
SET UsrLastActivityDate=GETDATE(), UsrProsrochen=1 
WHERE TypeId='03a75490-53e6-df11-971b-001d60e938c6' 
 AND DATEDIFF(dd,ModifiedOn,GETDATE())>60 и (?????не было задач)
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
Синтаксис команды T-SQL UPDATE позволяет обновлять одну таблицу, но для фильтрации по аналогии с командой SELECT можно использовать множество таблиц.
Т.е. В общем виде это выглядит так
UPDATE
  ОбновляемаяТаблица
SET
  ПолеОбновляемойТаблицы1 = Значение1
  , ПолеОбновляемойТаблицы2 = Значение2
FROM
  ОбновляемаяТаблица
LEFT OUTER JOIN
  ДополнительнаяТаблица
ON
  ДополнительнаяТаблица.Ключ = ОбновляемаяТаблица.Ключ
WHERE
  Условия фильтрации

Для условий вашей задачи можно по этому шаблону преобразовать условия из вашего SELECT запроса в условия для UPDATE:
UPDATE
  Account
SET
  UsrLastActivityDate = GETDATE()
  , UsrProsrochen = 1
FROM
  Account account -- Основная обновляемая таблица
LEFT OUTER JOIN
 Activity activity -- дополнительная таблица с информацией о задачах
ON
 activity.AccountId = account.Id
WHERE 
 TypeId = '03a75490-53e6-df11-971b-001d60e938c6'
  AND DATEDIFF(dd, ModifiedOn ,GETDATE()) > 60
  AND activity.Id IS NULL -- аналогичный SELECT фильтр на отсутствие задач
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы