2

massemail_emailmaster の GroupID 列を更新し、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))
4

2 に答える 2

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;
于 2013-12-15T19:45:48.317 に答える
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]
于 2013-12-15T19:03:21.813 に答える