Есть две таблицы:
1) dbo.tb_org
id_org s_FullName id_sps
1 АвтоОбуффь, торгово-сервисный центр NULL
2 Вершина, ИП Василенко Ю.Б. NULL
3 Гагарин-Шина, торгово-сервисный центр NULL
...n
2) dbo.tb_sps
id_sps s_Name Org
1 Фантазия ООО "Рога и Копыта"
2 Нет фантазии ЗАО "Хвосты и Копыта"
3 Почти дибил МУП "12"
...n
Необходимо обновить столбец id_sps таблицы dbo.tb_org согласно условию - если значение в столбце Org таблицы dbo.tb_sps равно значению столбца s_FullName таблицы dbo.tb_org возьми значение столбца id_sps таблицы dbo.tb_sps и произведи update столбца id_sps таблицы dbo.tb_org
Прошу помочь написать это на понятном сиквелю 2000 языке.
Update...
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Поможет коррелированный UPDATE. Т.е. выражение SET должно содержать коррелированный подзапрос
update dbo.tb_org as tb_org1
set is_sps = (select id_sps from dbo.tb_sps where Org=tb_org1.s_FullName);
При этом надо гарантировать уникальность значений в поле Org, иначе запрос прорвёт где-то на середине.
Если вдруг дубликаты есть, то их можно исключить используя агрегирование или директиву TOP N (Если я не ошибаюсь, у MSSQL она должна поддерживаться)
т.е. например:
update dbo.tb_org as tb_org1
set is_sps = (select min(id_sps) from dbo.tb_sps where Org=tb_org1.s_FullName);
или
update dbo.tb_org as tb_org1
set is_sps = (select top 1 id_sps from dbo.tb_sps where Org=tb_org1.s_FullName);
update dbo.tb_org as tb_org1
set is_sps = (select id_sps from dbo.tb_sps where Org=tb_org1.s_FullName);
При этом надо гарантировать уникальность значений в поле Org, иначе запрос прорвёт где-то на середине.
Если вдруг дубликаты есть, то их можно исключить используя агрегирование или директиву TOP N (Если я не ошибаюсь, у MSSQL она должна поддерживаться)
т.е. например:
update dbo.tb_org as tb_org1
set is_sps = (select min(id_sps) from dbo.tb_sps where Org=tb_org1.s_FullName);
или
update dbo.tb_org as tb_org1
set is_sps = (select top 1 id_sps from dbo.tb_sps where Org=tb_org1.s_FullName);
Спасибо большое! Буду пробовать.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Incorrect syntax near the keyword 'as'.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Ошибку выдает:Naeel Maqsudov писал(а):Поможет коррелированный UPDATE. Т.е. выражение SET должно содержать коррелированный подзапрос
update dbo.tb_org as tb_org1
set is_sps = (select id_sps from dbo.tb_sps where Org=tb_org1.s_FullName);
При этом надо гарантировать уникальность значений в поле Org, иначе запрос прорвёт где-то на середине.
Если вдруг дубликаты есть, то их можно исключить используя агрегирование или директиву TOP N (Если я не ошибаюсь, у MSSQL она должна поддерживаться)
т.е. например:
update dbo.tb_org as tb_org1
set is_sps = (select min(id_sps) from dbo.tb_sps where Org=tb_org1.s_FullName);
или
update dbo.tb_org as tb_org1
set is_sps = (select top 1 id_sps from dbo.tb_sps where Org=tb_org1.s_FullName);
Incorrect syntax near the keyword 'as'.
убери "as tb_org1" из скрипта и вместо "tb_org1" пиши явно "dbo.tb_org"Ashok писал(а):Спасибо большое! Буду пробовать.
Ошибку выдает:
Incorrect syntax near the keyword 'as'.