2013-12-15 4 views
2

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

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)) 
+0

Можете ли вы предоставить DDLS, или еще лучше, и SQLFiddle для таблиц? – Mureinik

+0

Не должно ли соединение проходить до заданного синтаксиса? –

+0

@Mureinik Я добавил детали столбца обеих таблиц. – techfun

ответ

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; 
1
UPDATE a2 
SET a2.GroupId = (SELECT TOP 1 a.GroupID 
        FROM [dbo].[massmail_groupmaster] a 
        INNER JOIN [dbo].[massmail_emailmaster] b 
        ON a.[groupname] = b.[groupname] 
       ) 
FROM [dbo].[massmail_emailmaster] a2 
WHERE a.[groupname] = a2.[groupname] 
+0

Это изменение устранило ошибку. Еще одно изменение во внутреннем подзапросе, чтобы он отлично работал. Я добавил, где выражение «где a. [Groupname] = a1. [Groupname]» в подзапросе в конце. В противном случае он установил бы все идентификаторы группы одинаковым. Большое спасибо! Ваше предложение действительно помогло. – techfun

Смежные вопросы