ошибка присоединения к подзапросу сервера sql

Я хочу обновить столбец GroupID в massemail_emailmaster и установить для него значение, которое хранится в massemail_groupmaster. В обеих таблицах есть столбец GroupName, который я использовал для присоединения к подзапросу. Но следующий запрос дает мне ошибку. Сообщение об ошибке - неправильный синтаксис рядом с a3. Я не понимаю ошибки в синтаксисе здесь. Пожалуйста помоги.

UPDATE [dbo].[massmail_emailmaster]  a3
set a3.GroupId =
      (select TOP 1 a1.GroupID from [dbo].[massmail_groupmaster] a1 
         join [dbo].[massmail_emailmaster] a2
      on a1.[groupname] = a2.[groupname]
where a3.[GroupName]=a2.[GroupName]) 

DDL таблицы [dbo]. [massmail_emailmaster]

(ClientID, varchar(50)),
           (uid, int)
           (Name, varchar(100))
           (GroupName, varchar(100))
           (Email, varchar(100))
           GroupId, int)

DDL таблицы

[dbo]. [massmail_groupmaster]
 (Clientid, varchar(50))
           ,(uid, int)
           ,(groupname, varchar(100))
(GroupId,int))

person techfun    schedule 15.12.2013    source источник
comment
Можете ли вы предоставить DDL или, что еще лучше, SQLFiddle для ваших таблиц?   -  person Mureinik    schedule 15.12.2013
comment
Разве объединение не должно предшествовать заданному синтаксису?   -  person Mad Dog Tannen    schedule 15.12.2013
comment
@Mureinik Я добавил сведения о столбцах обеих таблиц.   -  person techfun    schedule 15.12.2013
comment
@KayNelson Не могли бы вы уточнить свое предложение? Я действительно запутался в этом запросе.   -  person techfun    schedule 15.12.2013


Ответы (2)


Вы можете использовать псевдоним в update, когда позже определите его в предложении from. (Это "извращенная" ситуация, когда псевдоним определяется после его первого использования.)

UPDATE a3
    set GroupId = (select TOP 1 a1.GroupID
                   from [dbo].[massmail_groupmaster] a1
                   where a1.[groupname] = a3.[groupname]
                  )
    FROM [dbo].[massmail_emailmaster] a3;
person Gordon Linoff    schedule 15.12.2013

person    schedule
comment
Это изменение устранило ошибку. Еще одно изменение во внутреннем подзапросе, чтобы он работал идеально. Я добавил оператор where, где a.[groupname]=a1.[groupname] в подзапросе в конце. В противном случае для всех groupID будет установлено одинаковое значение. Большое спасибо! Ваше предложение действительно помогло. - person techfun; 15.12.2013