不确定为什么这不起作用:
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列上运行select,它运行正常吗?谢谢!
P.S。我在这里看了其他类似的问题,语法看起来一样,但显然我错过了一些东西。
答案 0 :(得分: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)
我添加了已注释的选项,以便您可以检查是否正在查看您想要的结果集。
答案 1 :(得分:2)
虽然UPDATE ... FROM语法在某些情况下是必不可少的,但我更喜欢尽可能使用子查询。这样做你需要的吗?
UPDATE UserSetting
SET isUnsubscribedFromSystemEmails = 1
WHERE userID in (SELECT userID from [User]
WHERE emailAddress in (SELECT emailAddress FROM BadEmailAddresses))
答案 2 :(得分:0)
试试这个:
UPDATE UserSetting ust SET usr.isUnsubscribedFromSystemEmails = 1
WHERE ust.emailAdress IN (select emailAddress from bademailAddresses);
答案 3 :(得分:0)
尝试:
UPDATE
UserSetting
SET
isUnsubscribedFromSystemEmails = 1
FROM
UserSetting
INNER JOIN
[User] ON UserSetting.userID = [User].userID
AND
[User].emailAddress IN (SELECT emailAddress FROM BadEmailAddresses)
答案 4 :(得分:0)
注意:仅为记录(假设您完成其他所有工作),您还可以在BadEmailAddresses
表上进行内部联接。
如果您遇到任何性能问题,那么您可能希望索引两个表中的emailAddress
列。