SELECT  top 8 * from PE_Article  left JOIN  PE_Comment on PE_Comment.InfoID=PE_Article.ArticleID  where ChannelID=1002  Order By ArticleID desc 
可以查询出8条数据,但是会把有重复的也显示出来SELECT  top 8 * from PE_Article  left JOIN PE_Comment on PE_Comment.InfoID=PE_Article.ArticleID where ChannelID=1002 and CommentID in(select  max(CommentID)  as  CommentID  from  PE_Comment  group  by  InfoID) Order By ArticleID desc 这样写到是没有重复了,但是只能显示3条了,就是只能显示pe_comment中不为空的数据了http://leiyanhao.host.080idc.cn/test/1.mdb  数据库的地址

解决方案 »

  1.   

    你的pe_comment表中本来就只有三条infoid不重复的记录.把重复行去掉,当然只有三行了.
      

  2.   

    不知道这么写access语法通不通得过去:
    select top 8 * 
    from PE_Article as a 
    left join
    (
    select a.* from PE_Comment as a inner join
    (select  max(CommentID)  as  CommentID  from  PE_Comment  group  by  InfoID) as b on a.CommentID=b.CommentID
    ) as b  on b.InfoID=a.ArticleID where ChannelID=1002
      

  3.   

    你那个三条与左连接无关.
    select  max(CommentID)  as  CommentID  from  PE_Comment  group  by  InfoID
    不只有18 19 20 三个吗,
    and CommentID in(select  max(CommentID)  as  CommentID  from  PE_Comment  group  by  InfoID) 
    是使最终只有三条记录的原因.
      

  4.   

    SELECT  top 8 * 
    from 
    PE_Article  a
    left JOIN 
    (select * from PE_Comment b where CommentID=(select max(CommentID) from PE_Comment where  InfoID=b.InfoID)) b on b.InfoID=a.ArticleID 
    where 
    ChannelID=1002  Order By ArticleID desc 这样就行了,Access不支持连三个表
      

  5.   

    或这样SELECT  top 8 * 
    from 
    PE_Article  a
    left JOIN 
    (select * from PE_Comment b where CommentID in (select max(CommentID) from PE_Comment group by InfoID)) b on b.InfoID=a.ArticleID 
    where 
    ChannelID=1002  Order By ArticleID desc 
      

  6.   


    那是SQL运行的,在Access不支持
      

  7.   

    你的LEFT JOIN不是本来就只选出了左侧表(PE_Comment)不为空的数据吗?!如果要把左侧表为空的数据也显示出来,要用RIGHT JOIN或者FULL OUTER连接.
    只有三条记录的原因正如8楼所说.不知道楼主想要什么样的效果?
      

  8.   

    SELECT  top 8 * from PE_Article  left JOIN (select * from pe_comment where commentid in (select min(commentid) from pe_comment group by infoid))t
    on t.InfoID=PE_Article.ArticleID  where ChannelID=1002  Order By ArticleID desc