日期:2014-05-17  浏览次数:20887 次

子查询中使用order by报错?
select t.yjfk_id,t.fid,t.yhid,jlcjr yhxm,t.lxfs,t.jlcjsj,t.bt,t.nr,(select count(0) from epdm_yjfk where fid=t.yjfk_id) hfs 
,(select jlcjsj from EPDM_YJFK where fid=t.yjfk_id and fid!='0' and rownum=1 order by jlcjsj desc) zhhfsjfrom EPDM_YJFK t where t.fid='0' and t.yhid='1003' order by jlcjsj desc

如上是个留言版的查询语句,要查出留言信息、留言的回复数、留言的最后回复时间和回复人。
留言和回复在一个表中,yjfk_id是主键,fid是父id,fid=0代表此留言是留言而不是回复。
如上红色部分报错,提示缺少右括号,红色部分为查询留言的最后回复时间(每条留言可多条回复,取最后回复时间)

------解决方案--------------------
你取最后回复时间错了,不是这样取,按下面的就可以了
SQL code

select t.yjfk_id,
       t.fid,
       t.yhid,
       jlcjr yhxm,
       t.lxfs,
       t.jlcjsj,
       t.bt,
       t.nr,
       (select count(0) from epdm_yjfk where fid = t.yjfk_id) hfs,
       (select max(jlcjsj)
          from EPDM_YJFK
         where fid = t.yjfk_id
           and fid != '0') zhhfsjfrom EPDM_YJFK t
 where t.fid = '0'
   and t.yhid = '1003'
 order by jlcjsj desc

------解决方案--------------------
探讨

其实我自己已经通过修改表结构解决了,想知道sql如何实现?没人?