sql server 子查询连接错误
Posted
技术标签:
【中文标题】sql server 子查询连接错误【英文标题】:sql server subquery join error 【发布时间】:2014-01-03 02:31:18 【问题描述】:我想更新 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])
表[dbo]. [massmail_emailmaster]
的DDL
(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))
【问题讨论】:
您能否为您的表提供 DDL 或更好的 SQLFiddle? 连接是否应该在集合语法之前? @Mureinik 我添加了两个表的列详细信息。 @KayNelson 你能详细说明你的建议吗?我对这个查询真的很困惑。 【参考方案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]
【讨论】:
此更改消除了错误。只需对内部子查询进行一项更改,即可使其完美运行。我在最后的子查询中添加了 where 语句“where a.[groupname]=a1.[groupname]”。否则它会将所有 groupID 设置为相同的值。非常感谢人!你的建议真的很有帮助。【参考方案2】:稍后在from
子句中定义别名时,您可以在update
中使用别名。 (这是一种“反常”情况,别名是在在第一次使用之后定义的。)
UPDATE a3
set GroupId = (select TOP 1 a1.GroupID
from [dbo].[massmail_groupmaster] a1
where a1.[groupname] = a3.[groupname]
)
FROM [dbo].[massmail_emailmaster] a3;
【讨论】:
以上是关于sql server 子查询连接错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个使用字符串连接的查询会在 SQL Server Compact Edition 中引发错误?
SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242
通过 MS Access 例程更新 SQL Server(内部连接错误)