高分求一更新语句!!!很多客户都在投诉,搞不定就惨了!
现有用户表
字段user_id,user_name,lastenterdate
贴子表
贴子ID,贴子主题,贴子内容,发贴人ID,发贴日期
更新用户表的lastenterdate为在贴子表中该用户的最后发贴日期,如果没有则不更新.
因为贴子表记录很多,要求更新语句效率高!!
急!!!!!!!!
------解决方案--------------------update 现有用户表
set lastenterdate = b.发贴日期
from 现有用户表 a inner join (select 发贴人ID,max(发贴日期) from 贴子表) b on a.user_id=b.贴人ID
------解决方案--------------------up
------解决方案--------------------update a
set a.lastenterdate=b.发贴日期
from 用户表 a,(select 发贴人ID,max(发贴日期) from 贴子表 group by 发贴人ID)b
where a.user_id=b.发贴人ID
------解决方案--------------------Update A Set A.lastenterdate=B.发贴日期
From A, (Select 发贴人ID, Max(发贴日期) From 贴子表 Group By 发贴人ID) As B
Where A.user_id=B.发贴人ID
------解决方案--------------------update a
set lastenterdate=b.发贴日期
from 用户表 a inner join 贴子表 b
on a.user_id=b.发贴人ID and
not exists (
select 1 from 贴子表
where 发贴人ID=b.发贴人ID and
发贴日期> b.发贴日期
)
------解决方案--------------------update a set lastenterdate=(select max(发帖日期) from board where 发帖人id=a.id ) from [user] a
------解决方案--------------------Update
A
Set
lastenterdate = B.发贴日期
From
用户表 A,
(Select 发贴人ID, Max(发贴日期) As 发贴日期 From 贴子表 Group By 发贴人ID) B
Where
A.user_id = B.发贴人ID
------解决方案--------------------樓主可以寫一個觸發器實時更新用户表。
通常情況下,一個用戶不會同時發表多個帖子,可以直接這麼寫。
Create Trigger TR_Updatelastenterdate On 贴子表
For Insert
As
Update
A
Set
lastenterdate = B.发贴日期
From
用户表 A,
Inserted B
Where
A.user_id = B.发贴人ID
GO
------解决方案--------------------考慮進 "一個用戶同時發表多個帖子 "這種情況,觸發器可以如下寫
Create Trigger TR_Updatelastenterdate On 贴子表
For Insert
As
Update
A
Set
lastenterdate = B.发贴日期
From
用户表 A,
(Select 发贴人ID, Max(发贴日期) As 发贴日期 From Inserted Group By 发贴人ID) B
Where
A.user_id = B.发贴人ID
GO
------解决方案--------------------update 用户表
set lastenterdate=a.发贴日期
from 用户表 join 贴子表 as a on 用户表.user_id=a.发贴人ID
where not exists(select 1 from 贴子表 where 发贴人ID=a.发贴人ID and 发贴日期> a.发贴日期 )