日期:2014-05-16  浏览次数:20967 次

高手帮帮忙,两个表的查询问题。group by太鸡肋了,纠结求助。555。。不差分
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

.....

...

..


------解决方案--------------------
参考下贴中的多种方法

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....
------解决方案--------------------
其实LZ如果这个问题解决不了,可以换一种思考的方式嘛,你现在实现不了就是无法找到评论最多的产品,表p与表c是一对多的关系,你可以再p表里面加一个字段,记录评论数,产品的ID是唯一的,然后排序根据评论数,再根据相应的产品取出品论。当然在评论的时候要加一个操作,就是每添加一条评论,就更新一下记录。。。。本人也是新手。。。。如果方法不好,望LZ别喷。。
------解决方案--------------------
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