在连接表中使用Join和Where子句的SQL Server 2008更新查询

tod*_*ddm 5 sql join in-clause sql-server-2008 sql-update

不知道为什么这不起作用:

UPDATE 
    ust
SET  
    ust.isUnsubscribedFromSystemEmails = 1
FROM         
    UserSetting AS ust 
INNER JOIN
    [User] ON ust.userID = [User].userID 
AND 
    [User].emailAddress IN (SELECT emailAddress FROM BadEmailAddresses)
Run Code Online (Sandbox Code Playgroud)

用简单的英语,我试图将isUnsubscribed字段设置为取消订阅,表userID中的UserSetting表等于userID用户表中的字段,而用户表emailAddress中的字段不在另一个表的电子邮件列表中.我可以使用几乎相同的语法在isUnsubbed列上运行select,它运行正常吗?谢谢!

PS我在这里看了其他类似的问题,语法看起来一样,但显然我错过了一些东西.

HLG*_*GEM 10

你是否忽略了某些东西.

set语句不能引用集合左侧的别名.

尝试:

UPDATE  
    ust 
SET   
    isUnsubscribedFromSystemEmails = 1 
--select *
FROM          
    UserSetting AS ust  
INNER JOIN 
    [User] ON ust.userID = [User].userID  
WHERE [User].emailAddress IN (SELECT emailAddress FROM BadEmailAddresses) 
Run Code Online (Sandbox Code Playgroud)

我添加了注释掉的选择,以便您可以检查是否正在查看您想要的结果集.


Pau*_*gle 2

尽管 UPDATE...FROM 语法在某些情况下至关重要,但我更喜欢尽可能使用子查询。这能满足您的需要吗?

UPDATE UserSetting
SET isUnsubscribedFromSystemEmails = 1
WHERE userID in (SELECT userID from [User]
                WHERE emailAddress in (SELECT emailAddress FROM BadEmailAddresses))
Run Code Online (Sandbox Code Playgroud)