подзапросы в НАБОРЕ ОБНОВЛЕНИЯ (SQL-сервер 2005)

У меня есть вопрос об использовании подзапросов в операторе Update. Мой пример:

UPDATE TRIPS
   SET locations = city + ', ' FROM (select Distinct city 
                                       from poi 
                                      where poi.trip_guid = trips.guid) 

Действительно ли возможно относиться к основному значению таблицы (trips.guid) в подзапросах?

Когда я пытаюсь использовать trips.guid Я получаю ошибку:

"Многослойный идентификатор "trips.guid" не мог быть связан".

Пункт 'избранный Отличный город от пои' возвращается больше что один город.

10
задан itdebeloper 8 April 2010 в 08:07
поделиться

4 ответа

Вы можете попробовать что-нибудь вроде

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
28
ответ дан 3 December 2019 в 13:47
поделиться

Вы можете использовать константы и значения из внешнего выбора в подвыборке:

Update trips
Set locations = ( Select Distinct trips.city + ', ' + poi.city
                  From poi
                  Where poi.trip_guid = trips.guid )

Мы не знаем, как выглядят ваши таблицы, поэтому я можно только предположить, что Distinct будет работать для вас таким образом (возвращая только один отличный город в подзапросе).

4
ответ дан 3 December 2019 в 13:47
поделиться

Другая версия.

UPDATE trips
SET locations = trips.city + ', ' + poi.city
FROM trips INNER JOIN poi
ON poi.trip_guid = trips.guid
8
ответ дан 3 December 2019 в 13:47
поделиться

Я нашел решение - просто переместите подзапрос в 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

Это все, что вам нужно сделать - отлично работает: )

1
ответ дан 3 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: