SQL Server:具有2个内部联接的UPDATE

时间:2018-05-15 18:42:55

标签: sql sql-server

我正在尝试使用Contacts_List表中的最后一个活动日期更新Opened表。所以我正在为Opened表做一个内连接,另一个表有一个公共列,然后用联系人列表做另一个内连接。我不知道为什么,但我不断收到以下错误。

  

Msg 156,Level 15,State 1,Line 4
  关键字'inner'附近的语法不正确。

请帮忙!

我的代码:

UPDATE [dbo].[Contacts_List]
SET [LAST_ACTIVITY_DATE] =  MAX(Opened.EvntCptrdDt)
WHERE [LAST_ACTIVITY_DATE] != MAX(Opened.EvntCptrdDt)
INNER JOIN [dbo].[Intrctn] R (nolock) ON Opened.IntrctnSK = R.IntrctnSK 
INNER JOIN [dbo].[Contacts_List] C (nolock) ON R.CustEmailID = C.Email_id 
GROUP BY Opened.IntrctnSK, R.IntrctnSK, R.EmailAdrText

发布的另一个问题是单个内部联接..我不确定如何在UPDATE语句中执行2个内部联接

3 个答案:

答案 0 :(得分:0)

您必须使用join为更新设置from clausule,但在这种情况下,您可以从变量执行此操作,声明它然后从变量更新值

select @variableUpdate = max(Opened.EvntCptrdDt), @variableWhere  = max(Opened.EvntCptrdDt) from Contacts_List join Intrctn R (nolock) on Opened.IntrctnSK = R.IntrctnSK  join Contacts_List C (nolock) on R.CustEmailID = C.Email_id 
where LAST_ACTIVITY_DATE != max(Opened.EvntCptrdDt)
 group by Opened.IntrctnSK, R.IntrctnSK, R.EmailAdrText

update [dbo].[Contacts_List]set [LAST_ACTIVITY_DATE] = @variableUpdate where [LAST_ACTIVITY_DATE] !=@variableWhere

答案 1 :(得分:0)

尝试这样的事情

UPDATE [dbo].[Contacts_List]
SET [LAST_ACTIVITY_DATE] =  MAX(Opened.EvntCptrdDt)
FROM [Contacts_List]
INNER JOIN Opened
ON ...........
INNER JOIN [dbo].[Intrctn] R (nolock) 
ON Opened.IntrctnSK = R.IntrctnSK 
INNER JOIN [dbo].[Contacts_List] C (nolock) 
ON R.CustEmailID = C.Email_id 

答案 2 :(得分:0)

UPDATE CL
SET [LAST_ACTIVITY_DATE] =  MAX(Opened.EvntCptrdDt)
FROM [dbo].[Contacts_List] CL
INNER JOIN [dbo].[Intrctn] R (nolock) ON CL.Opened.IntrctnSK = R.IntrctnSK 
AND R.CustEmailID = CL.Email_id 
WHERE [LAST_ACTIVITY_DATE] != MAX(Opened.EvntCptrdDt)
--GROUP BY Opened.IntrctnSK, R.IntrctnSK, R.EmailAdrText

我认为您不需要GROUP BY

相关问题