郁闷死了。下面这个order by子句,大家帮忙看看怎么写啊。
select sonpuid from prelation where fatherpuid = (SELECT  puid  FROM pitemrevision where rownum<=1 and itemtag IN ( select itemtag from pitemrevision a,pbomline b WHERE a.puid = B.CHILDITEM )  order by itemrevisionid desc);为什么提示order前面缺少右括号错误。在SQL Server中执行是好的。请问怎么才能实现上面的SQL的功能啊。很急啊。

解决方案 »

  1.   

    rownum是个伪id,不能和order by这样用。
      

  2.   

    由于rownum是一个总是从1开始的伪列。是在你order by之前已经产生,所以你order by的话再rownum <= 1会出错。
      

  3.   

    那应该怎么写,我把rownum<= 1 去掉,还是错的啊。
      

  4.   

    select sonpuid
      from prelation
     where fatherpuid =
           (SELECT puid
              FROM pitemrevision
             where rownum <= 1
               and itemtag IN (select itemtag
                                 from pitemrevision a, pbomline b
                                WHERE a.puid = B.CHILDITEM)
             order by itemrevisionid desc);order by有什么意义?返回结果只有一行!
    另外: 8i不支持子查询的order by 语法
      

  5.   

    select sonpuid from prelation where fatherpuid = (SELECT  puid  FROM pitemrevision where rownum<=1 and itemtag IN ( select itemtag from pitemrevision a,pbomline b WHERE a.puid = B.CHILDITEM )  order by itemrevisionid desc);
    你是不是应该把order by itemrevisionid desc里的itemrevisionid 改称puid 阿
      

  6.   

    楼上的,改成puid也不对。可能是Oracle不支持order by 子句排序吧。这个功能还必须,有没有解决办法?
      

  7.   

    select sonpuid
      from prelation
     where fatherpuid =
           (
             select puid from (
               SELECT puid
               FROM pitemrevision
               where itemtag IN (
                                  select itemtag
                                  from pitemrevision a, pbomline b
                                  WHERE a.puid = B.CHILDITEM
               )
               order by itemrevisionid desc
             )
             where rownum <= 1 
             );
      

  8.   

    有解决办法啊!如果楼主确实要用order by那就分开子查询,用临时表咯。
    create global temporary table tab_name
    SELECT   puid
                   FROM pitemrevision
                  WHERE ROWNUM <= 1
                    AND itemtag IN (SELECT itemtag
                                      FROM pitemrevision a, pbomline b
                                     WHERE a.puid = b.childitem)
               ORDER BY itemrevisionid DESC
    ;然后
    select sonpuid
      from prelation
     where fatherpuid in select * from tab_name;这样肯定可以。呵呵
      

  9.   

    漏了as
    create global temporary table tab_name as