Страница 1 из 1
Update...
Добавлено: 21 май 2009, 12:39
Ashok
Есть две таблицы:
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 языке.
Re: Update...
Добавлено: 21 май 2009, 13:06
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);
Re: Update...
Добавлено: 21 май 2009, 13:35
Ashok
Спасибо большое! Буду пробовать.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
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'.
Re: Update...
Добавлено: 24 июл 2009, 19:05
ustas
Ashok писал(а):Спасибо большое! Буду пробовать.
Ошибку выдает:
Incorrect syntax near the keyword 'as'.
убери "as tb_org1" из скрипта и вместо "tb_org1" пиши явно "dbo.tb_org"