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

Откуда:
Сообщений: 54
Здравствуйте. Подскажите пожалуйста как лучше сделать запрос...
есть SQL 2008 R2 с БД именем Card
в ней есть 2 таблицы Accessor (номера карт) и Client (имена гостей)
как можно подставить id из таблицы Client в поле OwnerClientId таблицы Accessor при условии:
что есть в таблице Client есть name='Гость_2012'
а в таблице Accessor есть поле track='2012'
как вот такие вещи синхронизировать - не знаю...
--
Так же данные заводились согласно id и если идти по id в обратную сторону по таблице Accessor то последнее значение будет соответствовать Client есть name='Гость_2012', предпоследнее в Accessor будет 2011 а в госте 'Гость_2011' - может тут как-то обратным перебором сделать?
--
UPDATE [Card].[dbo].[Accessor]
   SET [Accessor].[OwnerClientId] = [id].[Client]
 WHERE как тут правильно сделать....
GO

делаю построчно примерно так, можно как-то это упростить? Например через промежуточную таблицу?
UPDATE [Card].[dbo].[Card]
SET [Card].[dbo].[Accessor].[OwnerClientId] = '0A3286F1-7712-42E7-BC99-068F46BB4B9C' WHERE id='4603A74E-8A53-428F-BD8D-993AD04C2420';

Поделитесь пожалуйста советом, как лучше выполнять такие действия?
11 июл 17, 01:06    [20631589]     Ответить | Цитировать Сообщить модератору
 Re: update с выборкой по другой таблице  [new]
Remind
Member

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

Набросайте пример с тестовыми данными, а то ничего непонятно.
11 июл 17, 01:58    [20631604]     Ответить | Цитировать Сообщить модератору
 Re: update с выборкой по другой таблице  [new]
Добрый Э - Эх
Guest
lex871,

0) MERGE
1) UPDATE JOIN
11 июл 17, 04:30    [20631620]     Ответить | Цитировать Сообщить модератору
 Re: update с выборкой по другой таблице  [new]
lex871
Member

Откуда:
Сообщений: 54
как сопоставить в ClientId Id из таблицы client
Мне бы хоть какой-нибудь примерчик для простоты.

таблица Client
IdName
70EE8761-CC68-4B0E-8FAC-6E65217A9FFEГость_2000
3790AFDE-ADB6-477A-98AD-5EC5FE5AC358Гость_2001
40E1310A-D131-45FE-A0FB-33C1C18CEE72Гость_2002
F9E8CC57-B974-415B-983E-7A99AE0BCB51Гость_2003
2FE30844-A257-4FE3-AB94-C3CB514116DDГость_2004
E2B6B2D3-0FD5-4B20-9BE7-B65F707770AAГость_2005
0ED46B25-1625-49FB-950D-E6C0A4C68626Гость_2006
858AF966-5535-41E2-B117-8D93D7D35CB0Гость_2007
F8CE42A5-2401-46A6-BC40-D67399F19CB3Гость_2008
B484D44E-AB4E-46B8-AE3D-579C5E20803BГость_2009
860C0EE6-66C6-4581-A51E-9AEC9D356093Гость_2010
2E3CDE71-F949-480D-9722-3EA618D21B28Гость_2011
94F6E031-560B-47AF-98A9-9A163084AF82Гость_2012


таблица Acessor
IdExternalIdClientIdкак должно быть в ClientId
A9144D80-794D-4E85-A8EA-A4FA6C96F2DE200070EE8761-CC68-4B0E-8FAC-6E65217A9FFE
6FA74695-C9B4-460E-A9B8-12EFCFB65AB120013790AFDE-ADB6-477A-98AD-5EC5FE5AC358
0C2380CF-1B30-496C-9033-2CE24C3DEBEB200240E1310A-D131-45FE-A0FB-33C1C18CEE72
F348E6EE-2556-432E-9C8F-AAD11A9380EB2003F9E8CC57-B974-415B-983E-7A99AE0BCB51
9893D45E-CF9F-4D1F-9BB2-D54A84E7651320042FE30844-A257-4FE3-AB94-C3CB514116DD
5BD24078-3D86-4EE3-97EB-EC7ABC7B55EF2005E2B6B2D3-0FD5-4B20-9BE7-B65F707770AA
E1B61C6C-BB5E-4A0F-B707-0139C80A2EFD20060ED46B25-1625-49FB-950D-E6C0A4C68626
C33E1956-C4C6-49E6-8E05-02AF901A770C2007858AF966-5535-41E2-B117-8D93D7D35CB0
EFAB0333-0AC3-4C1A-AD80-871A1CCEEB392008F8CE42A5-2401-46A6-BC40-D67399F19CB3
0AE7821B-8D9A-4DC4-AEE1-7CBF4C7FAA7B2009B484D44E-AB4E-46B8-AE3D-579C5E20803B
98C2B443-D8EC-4FD3-8D6E-5B9F4440C8222010860C0EE6-66C6-4581-A51E-9AEC9D356093
2BCE4C59-27D7-40FE-8770-ABACDB42C95520112E3CDE71-F949-480D-9722-3EA618D21B28
FB1AEE23-5835-457C-BBA3-F81E1F976AD5201294F6E031-560B-47AF-98A9-9A163084AF82
12 июл 17, 02:54    [20635349]     Ответить | Цитировать Сообщить модератору
 Re: update с выборкой по другой таблице  [new]
Добрый Э - Эх
Guest
lex871,

данные твои. кому как ни тебе знать, как они друг с другом соотносятся?
12 июл 17, 06:45    [20635373]     Ответить | Цитировать Сообщить модератору
 Re: update с выборкой по другой таблице  [new]
Massa52
Member

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

DECLARE @Client TABLE(Id Char(36), Name NVarchar(10))
INSERT @Client (Id, Name) VALUES
('70EE8761-CC68-4B0E-8FAC-6E65217A9FFE',	N'Гость_2000'),
('3790AFDE-ADB6-477A-98AD-5EC5FE5AC358',	N'Гость_2001'),
('40E1310A-D131-45FE-A0FB-33C1C18CEE72',	N'Гость_2002'),
('F9E8CC57-B974-415B-983E-7A99AE0BCB51',	N'Гость_2003'),
('2FE30844-A257-4FE3-AB94-C3CB514116DD',	N'Гость_2004'),
('E2B6B2D3-0FD5-4B20-9BE7-B65F707770AA',	N'Гость_2005'),
('0ED46B25-1625-49FB-950D-E6C0A4C68626',	N'Гость_2006'),
('858AF966-5535-41E2-B117-8D93D7D35CB0',	N'Гость_2007'),
('F8CE42A5-2401-46A6-BC40-D67399F19CB3',	N'Гость_2008'),
('B484D44E-AB4E-46B8-AE3D-579C5E20803B',	N'Гость_2009'),
('860C0EE6-66C6-4581-A51E-9AEC9D356093',	N'Гость_2010'),
('2E3CDE71-F949-480D-9722-3EA618D21B28',	N'Гость_2011'),
('94F6E031-560B-47AF-98A9-9A163084AF82',	N'Гость_2012');

DECLARE @Acessor TABLE(Id Char(36), ExternalId NVarchar(4), ClientId Char(36) NULL)
INSERT @Acessor (Id, ExternalId) VALUES
('A9144D80-794D-4E85-A8EA-A4FA6C96F2DE',	N'2000'),		
('6FA74695-C9B4-460E-A9B8-12EFCFB65AB1',	N'2001'),		
('0C2380CF-1B30-496C-9033-2CE24C3DEBEB',	N'2002'),		
('F348E6EE-2556-432E-9C8F-AAD11A9380EB',	N'2003'),		
('9893D45E-CF9F-4D1F-9BB2-D54A84E76513',	N'2004'),		
('5BD24078-3D86-4EE3-97EB-EC7ABC7B55EF',	N'2005'),		
('E1B61C6C-BB5E-4A0F-B707-0139C80A2EFD',	N'2006'),		
('C33E1956-C4C6-49E6-8E05-02AF901A770C',	N'2007'),		
('EFAB0333-0AC3-4C1A-AD80-871A1CCEEB39',	N'2008'),		
('0AE7821B-8D9A-4DC4-AEE1-7CBF4C7FAA7B',	N'2009'),		
('98C2B443-D8EC-4FD3-8D6E-5B9F4440C822',	N'2010'),		
('2BCE4C59-27D7-40FE-8770-ABACDB42C955',	N'2011'),		
('FB1AEE23-5835-457C-BBA3-F81E1F976AD5',	N'2012');

SELECT Id, ExternalId, (SELECT Id FROM @Client C WHERE C.Name = N'Гость_' + A.ExternalId) AS AsInClientId FROM @Acessor A 

12 июл 17, 08:27    [20635488]     Ответить | Цитировать Сообщить модератору
 Re: update с выборкой по другой таблице  [new]
Remind
Member

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

Если точнее, то:

UPDATE a
SET a.ClientId = c.Id
FROM Accessor a
join Card c on c.Name = N'Гость_' + a.ExternalId
12 июл 17, 21:47    [20638643]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить