5

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

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)

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

PS我在这里查看了其他类似的问题,语法看起来相同,但显然我遗漏了一些东西。

4

5 回答 5

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) 

我添加了注释掉的选择,这样您就可以检查是否获得了您想要的结果集。

于 2010-09-20T15:23:11.403 回答
2

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

UPDATE UserSetting
SET isUnsubscribedFromSystemEmails = 1
WHERE userID in (SELECT userID from [User]
                WHERE emailAddress in (SELECT emailAddress FROM BadEmailAddresses))
于 2010-09-20T15:50:38.420 回答
0

试试这个 :

UPDATE UserSetting ust SET usr.isUnsubscribedFromSystemEmails = 1
WHERE ust.emailAdress IN (select emailAddress from bademailAddresses);
于 2010-09-20T15:24:34.613 回答
0

尝试:

UPDATE  
    UserSetting
SET   
    isUnsubscribedFromSystemEmails = 1 
FROM          
    UserSetting 
INNER JOIN 
    [User] ON UserSetting.userID = [User].userID  
AND  
    [User].emailAddress IN (SELECT emailAddress FROM BadEmailAddresses)
于 2010-09-20T15:42:58.063 回答
0

BadEmailAddresses注意:只是为了记录(假设您可以正常工作),您还可以对表进行内部联接。

如果您有任何性能问题,那么您可能希望emailAddress在两个表中为该列建立索引。

于 2012-09-06T16:24:34.803 回答