数据库 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