2012-01-23 55 views
0

我试图在表中更新date,这是基于另一个表中的MAX(date)。为了获得正确的数据链接,我必须做2个内连接和2个左外连接。带有连接的SQL Server更新

我可以选择正确的数据,它会返回一个Guid(PersonId)和Date。

我必须使用这些信息来更新我的原始表格。我无法让这个工作,我仍然得到语法错误。

update tblqualityassignments as assign 
inner join tblrequirementteams as team on assign.guidmemberid = team.guidmemberid 
set assign.dtmQAPCLed = dtmTaken 
from 
(
    select reg.guidpersonid, max(certs.dtmTaken) as dtmTaken from tblqualityassignments as assign 
    inner join tblrequirementteams as team on assign.guidmemberid = team.guidmemberid 
    inner join tblregisteredusercerts as reg on team.guidpersonid = reg.guidpersonid 
    left outer join tblcerttaken as certs on certs.guidcertid = reg.guidcertid 
    left outer join tblCodesCertType as types on types.intcerttypeid = certs.intcerttypeid 
    where types.intcerttypeid = 1 
    and assign.guidmemberid = team.guidmemberid 
    group by reg.guidpersonid as data 
) 
where data.guidpersonid = team.guidpersonid 

回答

2

假设你正在使用SQL Server对于这一点,那么这应该工作:关键字 '其中' 附近

UPDATE A 
SET A.dtmQAPCLed = dtmTaken 
FROM tblqualityassignments AS A 
INNER JOIN tblrequirementteams as T 
ON A.guidmemberid = T.guidmemberid 
INNER JOIN (select reg.guidpersonid, max(certs.dtmTaken) as dtmTaken 
      from tblqualityassignments as assign 
      inner join tblrequirementteams as team 
      on assign.guidmemberid = team.guidmemberid 
      inner join tblregisteredusercerts as reg 
      on team.guidpersonid = reg.guidpersonid 
      left outer join tblcerttaken as certs 
      on certs.guidcertid = reg.guidcertid 
      left outer join tblCodesCertType as [types] 
      on [types].intcerttypeid = certs.intcerttypeid 
      where [types].intcerttypeid = 1 
      and assign.guidmemberid = team.guidmemberid 
      group by reg.guidpersonid) data 
ON T.guidpersonid = data.guidpersonid 
+0

消息156,级别15,状态1,行17 语法错误。 – EvanGWatkins

+0

此外,where语句需要guidperson id = data.guidpersonid,并且A必须与tblrequirementteams进行内部连接才能获得该结果,那么如何在where语句中处理连接? – EvanGWatkins

+0

@EvanGWatkins - 好的,更新了我的答案。让我知道它是否有效 – Lamak