这句话:
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY)
WHERE ROWNUM = 1;
为什么我会收到此错误:
第1行的错误:
ORA-00933:SQL命令未正确结束SELECT CITY,LENGTH(CITY)FROM STATION ORDER BY LENGTH(CITY)ROWNUM = 1
答案 0 :(得分:6)
你可能想要这个:
select * from (
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY)
) WHERE rownum = 1;
您的查询中存在语法错误,因为ORDER BY
位于WHERE
子句之后。因此,在修复语法错误后,您将获得此信息:
SELECT CITY, LENGTH(CITY)
FROM STATION
WHERE ROWNUM = 1
ORDER BY LENGTH(CITY)
如果您还记得,WHERE
子句是在ORDER BY
子句之前计算的。
因为,ROWNUM伪列返回一个数字,表示Oracle从一个表或一组连接的行中选择行的顺序。选中的第一行的ROWNUM
为1,第二行为2,依此类推。 ROWNUM
返回值1,2,3,...基于提取表station
中的数据的顺序(可以是任何顺序),这可能不是您想要的。< / p>
如果您在子查询中嵌入ORDER BY
子句并将ROWNUM
条件放在顶级查询中,那么您可以强制在排序后应用ROWNUM
条件行。
所以,你的查询就变成了这个:
select * from (
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY)
) WHERE rownum = 1;
在此,首先根据子查询中CITY列的内容长度对行进行排序,然后按CITY列长度的递增顺序应用ROWNUM
。因此,现在您可以使用ROWNUM = 1
谓词过滤掉第一行。
或者,在Oracle数据库12c及更高版本中,您可以使用FETCH FIRST N ROWS ONLY
子句使您的生活更轻松(无需子查询)。
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY)
FETCH FIRST 1 ROW ONLY;
在完成订购后将对此子句进行评估,并返回前一行。
答案 1 :(得分:2)
如果您使用的是Oracle 12c,而不是CSS first
html,body, div, dir, pre {
display: block;
unicode-bidi: embed;
}
BDO[DIR="ltr"] {
direction: ltr;
unicode-bidi: bidi-override;
}
BDO[DIR="rtl"] { direction: rtl;
unicode-bidi: bidi-override
}
*[DIR="ltr"] { direction: ltr;
unicode-bidi: embed;
}
*[DIR="rtl"] {
direction: rtl;
unicode-bidi: embed;
}
body {
font-family: arial;
text-align: center;
}
.tooltip:hover {
direction: rtl;
unicode-bidi: bidi-override;
unicode-bidi: embed;
cursor: pointer;
}
.tooltip:hover:after {
position: absolute;
-webkit-transform: translateY(45px) translateX(30px);
-moz-transform: translateY(45px) translateX(30px);
transform: translateY(45px) translateX(30px);
background: aquamarine;
color: blue;
border-radius: 5px;
content: attr(tooltip);
padding: 5px 12px 5px 12px;
z-index: 13;
width: auto;
font-style: normal;
font-size: 22px;
white-space: nowrap;
border: 3px solid blue;
}
.tooltip:hover:before {
position: absolute;
text-align: right;
-webkit-transform: translateY(22px) translateX(-90px);
-moz-transform: translateY(22px) translateX(-90px);
transform: translateY(22px) translateX(-90px);
content: "▲";
font-size: 32px;
z-index: 13;
color: blue;
}
Javascript next
window.onload=function(){
document.getElementsByTagName("a")[0].setAttribute("class", "tooltip");
}
and the html
<a tooltip="supercalifragilisticexpialidocious">link element test</a>
,您还可以使用ROWNUM
子句:
FETCH FIRST
特别是如果您不希望按某些标准排序前N行,但也要在后面的调用中接下来的N行。然后,create table station (
city varchar2(200)
);
insert into station (city) values ('New York');
insert into station (city) values ('Rio');
insert into station (city) values ('Tokyo');
select city, length(city)
from station
order by length(city)
fetch first 1 rows only
;
-- Rio 3
比嵌套的OFFSET x ROWS FETCH NEXT x ROWS ONLY
,IMO更容易使用。
有关详细信息,请参阅http://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702(Ctrl-F&#34; row_limiting_clause&#34;)。
答案 2 :(得分:0)
这是正确的语法。
SELECT CITY, LENGTH(CITY)
FROM STATION
WHERE ROWNUM = 1
ORDER BY LENGTH(CITY) ;