Набор таблиц обновления 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, но если вы в конечном итоге обновите таблицу сами и заставите себя дать столбцам разные имена, это избавит вас от головной боли в будущем.

Другие вопросы по тегам