Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Тогда делаете апдэйт с джойном к этой таблице. |
||
5 мар 19, 23:08 [21825797] Ответить | Цитировать Сообщить модератору |
lex871 Member Откуда: Сообщений: 54 |
У меня эти данные не в таблице. Их просто в файлике присылают. Можно ли как-нить временную таблицу создать и перебирать данные? Или массивом через запятую? |
||||
6 мар 19, 00:20 [21825838] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
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] Ответить | Цитировать Сообщить модератору |
lex871 Member Откуда: Сообщений: 54 |
felix_ff, спасибо. А если я сделаю новую таблицу временную где будет такая структура
то в запросе как надо поправить "in ('99', '76', '55')" |
|||||||||
6 мар 19, 15:03 [21826382] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |