高手帮帮忙,两个表的查询问题。group by太鸡肋了,纠结求助。555。。不差分

leisurelong 2012-03-22 10:31:39
Access数据库
有两个表。
表一:KS_product (产品表) as p

表二:KS_comment(评论表)as c
关联字段是 p.id=c.infoid
我需要实现“热门评论”这个栏目

需要取出产品表里的产品名称和评论表里面的评论“content” 其中排序要按照评论数量最多的排序,
一个产品会有很多评论。但是我只要取出产品的第一条评论

如上sql语句怎么写?
,-----------连接查询,子查询,group by 。。。我都试了。。总是有重复数据。纠结了好久、希望好心人空闲之余帮忙测试指点一下。

我很菜写了很多版本,但是结果集都有重复数据:

select p.id,p.title,c.content from KS_product as p
inner join
(select top 1 infoid,content,count(0) from KS_comment
group by infoid,content
order by count(0) desc) as c on p.id = c.infoid

版本二:

select c.infoid,c.content,p.title,p.rank from KS_product as p inner join kS_comment as c on c.infoid=p.id group by infoid,rank,title,content

.....

...

..
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leisurelong 2012-03-23
  • 打赏
  • 举报
回复
感谢大家,发分。
wwwwb 2012-03-22
  • 打赏
  • 举报
回复
select * from (KS_product p inner join
(SELECT * FROM KS_comment A WHERE NOT EXISTS(SELECT 1 FROM KS_comment
WHERE A.infoid=infoid AND A.ID<id)) c on p.id=c.infoid)
inner join
(select infoid,count(*) as px from KS_comment group by infoid ) d
on p.id=d.infoid order by p.id,d.px
wwwwb 2012-03-22
  • 打赏
  • 举报
回复
贴记录、要求结果看看
OR
上传MDB到
WWW.ACCESS911.NET/CSDN
leisurelong 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwwwb 的回复:]
一个产品会有很多评论。但是我只要取出产品的第一条评论:假设ID唯一
SELECT * FROM KS_comment A WHERE NOT EXISTS(SELECT 1 FROM KS_comment
WHERE A.infoid=infoid AND A.ID<id)


select * from (KS_product p left join
(SELECT * FROM ……
[/Quote]
执行报错,语法错误 (操作符丢失) 在查询表达式 'p.id=d.infoid ordry by p.id' 中。
如果把“ordry by p.id,d.px”删掉。查询出的的是商品表中匹配不匹配的所有结果集,
高手在帮忙看看。分可以全给你...
文艺青年 2012-03-22
  • 打赏
  • 举报
回复
不好意思,刚看了LZ下面的回复,要取出产品的第一条评论,可以根据评论时间。。。。
文艺青年 2012-03-22
  • 打赏
  • 举报
回复
其实LZ如果这个问题解决不了,可以换一种思考的方式嘛,你现在实现不了就是无法找到评论最多的产品,表p与表c是一对多的关系,你可以再p表里面加一个字段,记录评论数,产品的ID是唯一的,然后排序根据评论数,再根据相应的产品取出品论。当然在评论的时候要加一个操作,就是每添加一条评论,就更新一下记录。。。。本人也是新手。。。。如果方法不好,望LZ别喷。。
ACMAIN_CHM 2012-03-22
  • 打赏
  • 举报
回复
参考下贴中的多种方法

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....
wwwwb 2012-03-22
  • 打赏
  • 举报
回复
一个产品会有很多评论。但是我只要取出产品的第一条评论:假设ID唯一
SELECT * FROM KS_comment A WHERE NOT EXISTS(SELECT 1 FROM KS_comment
WHERE A.infoid=infoid AND A.ID<id)


select * from (KS_product p left join
(SELECT * FROM KS_comment A WHERE NOT EXISTS(SELECT 1 FROM KS_comment
WHERE A.infoid=infoid AND A.ID<id)) c on p.id=c.infoid)
left join
(select infoid,count(*) as px from KS_comment group by infoid ) d
on p.id=d.infoid ordry by p.id,d.px
wwwwb 2012-03-22
  • 打赏
  • 举报
回复
贴记录、要求结果看看
OR
上传MDB到
WWW.ACCESS911.NET/CSDN
leisurelong 2012-03-22
  • 打赏
  • 举报
回复
自己先顶一下,在线等高手。好心人

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧