论坛首页 入门技术论坛

SQL问题

浏览 7948 次
锁定老帖子 主题:SQL问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-31  
select distinct g.*
from groups g inner join topics t on (t.group_id = g.id)
order by t.created_at desc
limit 0,6

为什么结果不对?
相对于

select   g.*
from groups g inner join topics t on (t.group_id = g.id)
order by t.created_at desc
limit 0,6明显不一致
   发表时间:2007-05-31  
写的不一样  当然不一至
你想说什么
0 请登录后投票
   发表时间:2007-05-31  
排在 g.* 这样选出来的,不在distinct g.*选出来的里面
0 请登录后投票
   发表时间:2007-05-31  
?怎么
0 请登录后投票
   发表时间:2007-05-31  
不太可能吧,distinct只是去掉重复条而已啊
肯定会有啊
难道还能丢了不成
0 请登录后投票
   发表时间:2007-05-31  
所以才奇怪
0 请登录后投票
   发表时间:2007-05-31  

kevinye 写道:
select distinct g.*
from groups g inner join topics t on (t.group_id = g.id)
order by t.created_at desc
limit 0,6

为什么结果不对?
相对于

select   g.*
from groups g inner join topics t on (t.group_id = g.id)
order by t.created_at desc
limit 0,6明显不一致


我倒,我才看出来,主要问题在limit 0,6这个条件,你限制了取的条数,那么一个是取distinct一个直接取,这当然不一样了

0 请登录后投票
   发表时间:2007-06-01  
why?
0 请登录后投票
   发表时间:2007-06-01  
我举个例子但和你说的那个不一定一样,应该是先取记录吧,就是那个select先弄出来,假如记录是a,a,b,b,c,c,d,d,e,e,f,f,g,g,h,h,i,i

第一把,先取吧是a,a,b,b,c,c,.....假如再倒排下c,c,b,b,a,a,....完了,再按你那个索引取记录6条,c,c,b,b,a,a完事

第二把,先取吧a,b,c,d,e,f,g,h,i完了,再倒排下i,h,g,e,d,c,b,a好了再按你的那个索引取记录6条,i,h,g,e,d,c完事

结果是没一个一样的
0 请登录后投票
   发表时间:2007-06-17  
SELECT g . * , count( DISTINCT t.group_id )
FROM groups g
INNER JOIN topics t ON ( t.group_id = g.id )
GROUP BY t.group_id
ORDER BY t.created_at DESC
LIMIT 0 , 6

其原因是distinct只能返回它的目标字段,而无法返回其它字段
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics