Sql 基于其他两个表值更新表列

Sql 基于其他两个表值更新表列,sql,sql-server,sql-server-2012,sql-update,inner-join,Sql,Sql Server,Sql Server 2012,Sql Update,Inner Join,我需要根据其他两个表中的数据更新其中一个表中的一列 因此,我希望表QuestionObjections中的isAvailable列根据2个条件设置为1,这就是我所拥有的: UPDATE dbo.questObjectives SET isAvailable = 1 FROM dbo.questObjectives qo INNER JOIN dbo.dungeonList dl ON qo.questID = dl.questID WHERE d

我需要根据其他两个表中的数据更新其中一个表中的一列

因此,我希望表QuestionObjections中的isAvailable列根据2个条件设置为1,这就是我所拥有的:

UPDATE
    dbo.questObjectives
SET
    isAvailable = 1
FROM
    dbo.questObjectives qo
INNER JOIN
    dbo.dungeonList dl
ON 
    qo.questID = dl.questID
    WHERE dl.dungeonType = 17
    AND qo.objectiveID IN(SELECT objectiveID FROM gameMissions)
因此,若要转换,isAvailable应设置为1,前提是:

the linked dungeonList type is 17
the questionObjectives objectiveID is in the table gameMissions
所以我认为我的逻辑是正确的,但我一直犯这个错误:

'invalid column name isAvailable.'
但它就在那里。它在问题目标表中,所以我不确定我做错了什么

有什么想法吗

谢谢

这就是你想要的吗

update qo
set qo.isavailable = 1
from questObjectives qo
inner join dungeonList dl on qo.questID = dl.questID
where 
    dl.dungeonList = 17
    and exists (select 1 from gameMissions gm where gm.objectiveID  = qo.objectiveID)
查询的主要问题是在
update
from
子句中都有目标表
questoobjectives
;您应该在
from
子句中只使用一次,然后在
update
子句中引用别名


我还重写了条件中的
,作为与
exists
相关的子查询-逻辑是相同的,但这可能会执行得更好。

当您为更新表别名时,您
更新别名…
更新qo
非常擅长回答语法类型的问题。