oracle 10g子查询中使用rownum取到同样的值,为什么?

createtablem_title(tidnumber(10)primarykey);createtablem_comment(cidnumber(10)primary... create table m_title(
tid number(10) primary key
);
create table m_comment(
cid number(10) primary key,
tid number(10),
constraint tid_fk foreign key (tid) references m_title(tid)
);
insert into m_title values(1);
insert into m_title values(2);
insert into m_title values(3);
insert into m_comment values(1,1);
insert into m_comment values(2,1);
insert into m_comment values(3,2);
insert into m_comment values(4,1);
insert into m_comment values(5,3);
insert into m_comment values(6,2);
commit;

--查找id最大的一条评论记录
select t.tid,
(select cid
from (select c.cid
from m_comment c
where c.tid = t.tid
order by c.cid desc)--cid倒序
where rownum = 1) as cid--倒序之后取第一条,也就是最大
from m_title t;
结果:
1 1 6
2 2 6
3 3 6

为什么取到都是一样的cid?如果改成select max(c.cid)就没有问题。
展开
 我来答
TUBER727
2014-05-21 · TA获得超过428个赞
知道小有建树答主
回答量:351
采纳率:100%
帮助的人:111万
展开全部
其实你sql嵌套太多层了 不建议你上面的语句。我刚刚把你的语句拷贝出来 好像不能执行。
你可以看看下面的
select t.tid,(select max(c.cid) from m_comment c where c.tid = t.tid) as cid
from m_title t;
或者
select t.tid,
(select tt.cid from (select row_number() over(partition by tid order by cid desc) rn,tid,cid from m_comment) tt where tt.rn=1 and tt.tid = t.tid)
from m_title t
希望可以帮到你。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
IT职场成长课
2014-05-21 · TA获得超过612个赞
知道小有建树答主
回答量:192
采纳率:0%
帮助的人:66.6万
展开全部
方案1:select t.tid,max(c.cid)
from m_title t,m_comment c
where t.tid = c.tid
group by t.tid;

方案2:按你的SQL写法

select t.tid,
(select cid
from (select c.cid,tid
from m_comment c
where c.tid = tid
order by c.cid desc)--cid倒序
where tid = t.tid and rownum = 1) as cid--倒序之后取第一条,也就是最大
from m_title t;
--你得把tid传到上一层的子查询,然后与m_title的tid关联。
追问
是可以了,可是为什么把关联条件放上一层就可以呢?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SuperAltaria
2014-05-21
知道答主
回答量:33
采纳率:0%
帮助的人:21.5万
展开全部
如果没看错的话,把where rownum=1放进最里面应该可以把
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-05-21
展开全部
你这样永远都会取6的,使用ROW_NUMBER() OVER(PARTITION BY t.tid order by c.cid DESC) rn
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式