Набор таблиц обновления sql - не удалось связать идентификатор из нескольких частей
У меня есть 2 таблицы:
- Таблица1 = названия АЗС (в парах)
- Таблица2 = имеет информацию о координатах (среди прочего, долгота и широта)
Пример таблицы 1:
StationID1 StationID2 Name1 Name2 Lattitude1 Longitude1 Lattitude2 Longitude2 Distance
------------------------------------------------------------------------------------------------
93353477 52452 FOO BAR NULL NULL NULL NULL NULL
93353527 52452 HENRY BENNY NULL NULL NULL NULL NULL
93353551 52452 GALE SAM NULL NULL NULL NULL NULL
Пример таблицы 2:
IDInfo Name Lattitude Longitude
-------------------------------------------
93353477 BAR 37.929654 -87.029622
Я хочу обновить эту таблицу с информацией о координатах, которая находится в tableA
, Я пытался сделать следующее в соответствии с SQL Server 2005: идентификатор из нескольких частей... не может быть связан
update table1
set t1.[Lattitude1] = t2.[Lattitude]
from table1 t1
left join table2 t2
on (t1.StationID1 = t2.IDInfo)
Я получаю следующее сообщение об ошибке:
Сообщение 4104, уровень 16, состояние 1, строка 1
Многоэлементный идентификатор "t1.Lattitude1" не может быть связан.
Однако, если я сделаю следующее, это сработает, и я смогу сохранить его в другой таблице.
SELECT t1.[StationID1]
,t1.[StationID2]
,t1.[Name1]
,t1.[Name2]
,t2.[Lattitude] AS [Lattitude1]
,t2.[Longitude] AS [Longitude1]
,t3.[Lattitude] AS [Lattitude2]
,t3.[Longitude] AS [Longitude2]
from table1 t1
left join table2 t2
on (t1.StationID1 = t2.IDInfo)
left join table2 t3
on (t1.StationID2 = t2.IDInfo)
Я очень плохо знаком с SQL, и мне трудно понять, почему некоторые вещи работают, а другие нет. Исходя из ссылки, которую я разместил выше, мой первоначальный запрос должен был сработать - нет? Возможно, я не думаю прямо, поскольку потратил много часов, пытаясь это сделать, и, наконец, я получил помощь от коллеги (она предложила подход, о котором я упоминал выше).
2 ответа
Я думаю, что вы можете изменить свой оператор UPDATE, чтобы ссылаться на псевдоним таблицы в строке UPDATE.
update t1
set t1.[Lattitude1] = t2.[Lattitude]
from table1 t1
left join table2 t2
on (t1.StationID1 = t2.IDInfo)
Вам нужно изменить внутреннюю таблицу и дать другой псевдоним столбцам, которые похожи. Это должно работать.
update table1
set [Lattitude1] = x.[lat]
from
(
SELECT IDInfo [id], Lattitude [lat] FROM
table2
) x
WHERE
StationID1 = x.[id]
В вашем конкретном случае нет необходимости переименовывать Lattitude в lat, но если вы в конечном итоге обновите таблицу сами и заставите себя дать столбцам разные имена, это избавит вас от головной боли в будущем.