有两个表:
用户表:
      用户ID  用户名  发表日志数
         1      A         2
         2      B         10
文章表:
      文章ID  发表者 ……
         1      A 
         2      A    
         3      A
         4      B我想先从文章表里读出每个用户的发表数,然后更新用户表里的“发表日志数”采用SQL语句(过程)来实现,请问有什么思路呢。有人说用游标:从文章表里读出每一条记录,然后更新……以下是类似的ASP代码 SQL="SELECT mem_Name,mem_PostLogs,mem_PostComms FROM blog_Member"
PostNums_MemList.Open SQL,Conn,1,3
SQLQueryNums=SQLQueryNums+1
Do While Not PostNums_MemList.EOF
PostNums_MemList("mem_PostLogs")=Conn.ExeCute("SELECT COUNT(log_ID) FROM blog_Content WHERE log_Author="""&PostNums_MemList("mem_Name")&"""")(0)
SQLQueryNums=SQLQueryNums+1
PostNums_MemList("mem_PostComms")=Conn.ExeCute("SELECT COUNT(comm_ID) FROM blog_Comment WHERE comm_Author="""&PostNums_MemList("mem_Name")&"""")(0)
SQLQueryNums=SQLQueryNums+1
PostNums_MemList.Update
PostNums_MemList.MoveNext
Loop
大家帮忙想想……

解决方案 »

  1.   

    select 发表者, count(id) as 发表數
    from 文章表
    group by 发表者
      

  2.   

    select 发表者, count(id) as 发表數, 日志数=(select 发表日志数 from 用户表 where 用户名=文章表.发表者)
    from 文章表
    group by 发表者
      

  3.   

    很简单啊,
    用表变量或者临时表都可以
    declare @temp table(name varchar(50),count int);
    insert into @temp select name,count(ID) from tableB group by name;
    得到临时表里面有文章数
    下面可以用游标来更新TableA的内容
    declare @count int
    declare @name varchar(50)
    declare cursor_a cursor
    for select name, count from @temp
    open cursor_a
    fech next from cursor_a into @name,@count
    while @@FETCH_STATUS=0
    begin
        update TableA set count = @count where name=@name
        fech next from cursor_a into @name,@count
    end
    close cursor_a
    deallocate cursor_a
      

  4.   

    比如:
    users表有字段 id int identity, username varcahr(10), articleCount int
    articles表有字段 id int identity, username varcahr(10)那么可以这样处理:
    declare @userName varchar(10), @articleCount intDECLARE user_Cursor CURSOR FOR
    SELECT a.username, a.articleCount  FROM (select username, count(id) as articleCount from articles group by username) a
    OPEN user_CursorFETCH NEXT FROM user_Cursor  INTo @username, @articleCount
    WHILE @@FETCH_STATUS = 0
    BEGIN
    if exists(select 1 from users where username=@username)
    begin
    update users set articleCount=@articleCount where username=@username
    end
    else
        begin
    insert into users(username, articleCount ) values(@username, @articleCount) 
    end FETCH NEXT FROM user_Cursor  INTo @username, @articleCount
    ENDCLOSE user_Cursor
    DEALLOCATE user_Cursorselect * from users
      

  5.   

    谢谢其实也可以这样实现…………
    update blog_Member set mem_PostLogs=(select count(log_ID) from blog_Content where 
    log_Author=blog_Member.mem_Name)update blog_Member set mem_PostComms=(select count(comm_ID) from blog_Comment where comm_Author=blog_Member.mem_Name)效果不错 ,呵呵