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

请帮忙检查该SQL语句错在哪里
数据库   Oracle   9.0.1
表1
create   table   WEB_IMAGE
(
    ID       NUMBER(8)   not   null,
    XXLB   NUMBER(6)   not   null,     --类别     1:news   ...
    BT       VARCHAR2(40),
    SX       NUMBER(3)   not   null,     --顺序    
    ZPLJ   VARCHAR2(128)   not   null,
    ZPK     NUMBER(4),
    ZPG     NUMBER(4),
    ZPMS   VARCHAR2(64),
    XXID   NUMBER(8)   not   null     --信息类别   news.id
);

表2
create   table   NEWS
(
    ID       NUMBER(8)   not   null,
    FL       CHAR(3),
    BT       VARCHAR2(64)   not   null,
    ZZ       VARCHAR2(18),
    GXSJ   DATE   not   null,     --更新时间
    FBBM   VARCHAR2(8),
    ZP       BLOB,
    ZPK     NUMBER(4),
    ZPG     NUMBER(4),
    ZPMS   VARCHAR2(128),
    NR       CLOB,
    LLCS   NUMBER(5)
);

SQL语句如下
Select   xxid,Min(sx)   sx   From   web_image   Where   xxlb=1
And   EXISTS   (
Select   news.Id   From   news     Where   Rownum <=6   And   news.Id=web_image.xxid   Order   By   gxsj   Desc)
Group   By   xxid;

问题
执行该语句时提示   ora-00907   缺少右括号错误,其实并不缺少右括号。当删除   Order   by   gxsj   Desc   后语句正常执行,没有任何错误提示。我不明白这是为什么?请朋友们指点。
在网上也看到有很多网友提出此问题,好像无法解决。请精通SQL的朋友帮忙看看怎样写能绕过这个问题?
谢谢。

------解决方案--------------------
不知道你要实现什么查询,EXISTS里面的select查询并不输出,没必要去排序啊?
------解决方案--------------------
子查询是不允许使用order by的
------解决方案--------------------
改成如下试试:

Select xxid,Min(sx) sx
From web_image
INNER JOIN (Select Id, DENSE_RANK() OVER (Order By gxsj Desc) AS RNUM From news) A
on web_image.xxid = A.ID AND xxlb=1 AND RNUM < 7