У меня есть вопрос об использовании подзапросов в операторе Update. Мой пример:
UPDATE TRIPS
SET locations = city + ', ' FROM (select Distinct city
from poi
where poi.trip_guid = trips.guid)
Действительно ли возможно относиться к основному значению таблицы (trips.guid) в подзапросах?
Когда я пытаюсь использовать trips.guid
Я получаю ошибку:
"Многослойный идентификатор "trips.guid" не мог быть связан".
Пункт 'избранный Отличный город от пои' возвращается больше что один город.
Вы можете попробовать что-нибудь вроде
UPDATE trips
SET locations = t.city + ', ' + poi.city
FROM trips t INNER JOIN
(
select Distinct city, trip_guid from poi
) poi ON t.trip_guid = poi.trip_guid
Вы можете использовать константы и значения из внешнего выбора в подвыборке:
Update trips
Set locations = ( Select Distinct trips.city + ', ' + poi.city
From poi
Where poi.trip_guid = trips.guid )
Мы не знаем, как выглядят ваши таблицы, поэтому я можно только предположить, что Distinct
будет работать для вас таким образом (возвращая только один отличный город
в подзапросе).
Другая версия.
UPDATE trips
SET locations = trips.city + ', ' + poi.city
FROM trips INNER JOIN poi
ON poi.trip_guid = trips.guid
Я нашел решение - просто переместите подзапрос в UDF :)
UPDATE TRIPS
SET locations = getAllTripCity(guid);
Исходный код моего UDF:
CREATE FUNCTION dbo.getAllTripCity(
@tripGuid uniqueidentifier
)
RETURNS nvarchar(200)
AS
BEGIN
DECLARE @cities nvarchar(200);
set @cities = ''
select @cities = @cities + city + ' ' from (select DISTINCT city poi where poi.trip_guid = @tripGuid)
return @ @cities;
END
Это все, что вам нужно сделать - отлично работает: )