Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помощь в запросе с обновлением данных в 2 таблицах  [new]
lex871
Member

Откуда:
Сообщений: 54
Друзья, подскажите пожалуйста, как можно проще проапдейтить единым значением разные данные
у меня есть гости с id 99,98, 76, и т.д. - просто набор данных, в последовательность не заложить
и вот надо всем этим значениям из таблицы Accessor присвоить значение 20 в таблице Abstract с синхронизацией по id
как то можно это реализовать через временные таблицы, или через массив?
Я пока пишу для каждой операции данный запрос:

UPDATE Abstract SET Value = 20
WHERE Id = (SELECT Id FROM Account WHERE AccountId = (SELECT Id FROM Account WHERE AccountableId = (SELECT Id FROM Accessor WHERE Ext = '99')))
5 мар 19, 00:12    [21824926]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе с обновлением данных в 2 таблицах  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
lex871,

В простейшем случае ваши вложенные подзапросы переписываются так, но Вам бы неплохо пример структуры хранения данных предоставить.
update t
   set Id = 20
  from Abstract t
      join Account a on a.[Id] = t.[Id]
          join Account a2 on a2.[Id] = a.[AccountId]
              join Abstract t2 on t2.[Id] = a2.[AccountableId] and t2.[Ext] = '99'
5 мар 19, 00:52    [21824953]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе с обновлением данных в 2 таблицах  [new]
lex871
Member

Откуда:
Сообщений: 54
felix_ff спасибо за ответ.
У меня вопрос, как можно сделать так, чтобы не писать
300 таких запросов, а как-нить Ext - сделать циклом по какой-то таблице....
т.е. чтобы перечислить Ext 99, 76, 55 и т.д. и одним запросом их все обновить....

UPDATE Abstract SET Value = 20
WHERE Id = (SELECT Id FROM Account WHERE AccountId = (SELECT Id FROM Account WHERE AccountableId = (SELECT Id FROM Accessor WHERE Ext = '99')))
UPDATE Abstract SET Value = 20
WHERE Id = (SELECT Id FROM Account WHERE AccountId = (SELECT Id FROM Account WHERE AccountableId = (SELECT Id FROM Accessor WHERE Ext = '76')))
UPDATE Abstract SET Value = 20
WHERE Id = (SELECT Id FROM Account WHERE AccountId = (SELECT Id FROM Account WHERE AccountableId = (SELECT Id FROM Accessor WHERE Ext = '55')))
5 мар 19, 00:58    [21824956]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе с обновлением данных в 2 таблицах  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30734
lex871
300 таких запросов, а как-нить Ext - сделать циклом по какой-то таблице....
т.е. чтобы перечислить Ext 99, 76, 55 и т.д. и одним запросом их все обновить....
Этот список Ext у вас откуда берётся? Из таблицы?
Тогда делаете апдэйт с джойном к этой таблице.
5 мар 19, 23:08    [21825797]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе с обновлением данных в 2 таблицах  [new]
lex871
Member

Откуда:
Сообщений: 54
alexeyvg
lex871
300 таких запросов, а как-нить Ext - сделать циклом по какой-то таблице....
т.е. чтобы перечислить Ext 99, 76, 55 и т.д. и одним запросом их все обновить....
Этот список Ext у вас откуда берётся? Из таблицы?
Тогда делаете апдэйт с джойном к этой таблице.

У меня эти данные не в таблице. Их просто в файлике присылают. Можно ли как-нить временную таблицу создать и перебирать данные? Или массивом через запятую?
6 мар 19, 00:20    [21825838]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе с обновлением данных в 2 таблицах  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
lex871,

update t
   set Id = 20
  from Abstract t
      join Account a on a.[Id] = t.[Id]
          join Account a2 on a2.[Id] = a.[AccountId]
              join Abstract t2 on t2.[Id] = a2.[AccountableId] and t2.[Ext] in ('99', '76', '55')

если у вас Ext уникальные значения. иначе вся ваша логика посыпится ошибками
6 мар 19, 01:11    [21825851]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе с обновлением данных в 2 таблицах  [new]
lex871
Member

Откуда:
Сообщений: 54
felix_ff,
спасибо. А если я сделаю новую таблицу временную где будет такая структура
idEXT
16515616599
65464654476
34354654455

то в запросе как надо поправить "in ('99', '76', '55')"
6 мар 19, 15:03    [21826382]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить