如何从oracle sql中只选择1行?

Ben*_*Ben 100 sql oracle oracle9i

我想使用oracle语法从表中只选择1行DUAL.例如,我想执行此查询:

SELECT user 
  FROM DUAL
Run Code Online (Sandbox Code Playgroud)

......它有40条记录.但我只需要一条记录.......而且,我想在没有WHERE条款的情况下实现它.

我需要table_name字段中的内容,例如:

SELECT FirstRow(user) 
  FROM DUAL
Run Code Online (Sandbox Code Playgroud)

min*_*rus 157

你使用ROWNUM.

即.

SELECT user FROM Dual WHERE ROWNUM = 1
Run Code Online (Sandbox Code Playgroud)

http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

  • 您需要:`SELECT*FROM(SELECT用户FROM员工ORDER BY SALARY DESC)WHERE ROWNUM <= 10 (14认同)
  • @mkdess:不,`ORDER BY`在`WHERE`之后应用. (9认同)

小智 39

我在其中一条评论中发现了这个"解决方案".由于我正在查找它一段时间,我想强调一下(还不能评论或做这样的东西......),所以这就是我用过的东西:

SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1
Run Code Online (Sandbox Code Playgroud)

这将从表中的最新条目打印出所需的[Column]条目,假设始终通过SYSDATE插入[Date].


man*_*ni0 27

Oracle 12c中提供了此语法:

select * from some_table fetch first 1 row only;
select * from some_table fetch first 1 rows only;
select * from some_table fetch first 10 row only;
select * from some_table fetch first 10 rows only;
Run Code Online (Sandbox Code Playgroud)

^^我只是想证明无论多个所需的行数,都可以使用行或行(复数).)

  • 正确 - 您使用的可能是版本 10.1.xxx ,您可以 SELECT * FROM V$VERSION (3认同)

ype*_*eᵀᴹ 7

据我所知,dualOracle中的表是一个只有一行的特殊表.所以,这就足够了:

SELECT user
FROM dual
Run Code Online (Sandbox Code Playgroud)

  • @Ben Dual 不是目录视图,它不会显示“所有用户”。为此,您可以使用 ALL_USERS 之类的视图。 (2认同)

Fua*_*uat 6

答案是:

您应将嵌套查询用作:

SELECT *
FROM ANY_TABLE_X 
WHERE ANY_COLUMN_X = (SELECT MAX(ANY_COLUMN_X) FROM ANY_TABLE_X) 
Run Code Online (Sandbox Code Playgroud)

=>在PL / SQL中,“ ROWNUM = 1”不等于TSQL的“ TOP 1”。

因此,您不能使用这样的查询:“从any_table_x中选择*,其中rownum = 1由any_column_x排序;” 因为oracle获取第一行,然后应用order by子句。

  • @hgwhittle,Fuat之所以正确是因为ROWNUM不在乎“ ordery by”,它只是抓住它可以找到的第一个记录并立即返回它。因此,换句话说,ROWNUM限定词对“ Order By”命令没有任何尊重。我希望不是这样,但是Fuat是正确的,可以使用嵌套查询。 (7认同)
  • 请对您的答案进行一些说明 (3认同)

Dev*_*eva 6

我们有3个选择来获取Oracle DB表的第一行。

1)select * from table_name where rownum= 1是最好的方法

2) select * from table_name where id = ( select min(id) from table_name)

3)

select * from 
    (select * from table_name order by id)
where rownum = 1
Run Code Online (Sandbox Code Playgroud)


Oh *_*oon 5

limit 1Oracle中没有条件(即MySQL/PostgresSQL),您需要指定where rownum = 1.


gdo*_*ica 5

"FirstRow"是一个限制,因此它where不在条款中的select条款中.它被称为rownum

select * from dual where rownum = 1;
Run Code Online (Sandbox Code Playgroud)

  • 什么,所以`SELECT*FROM(SELECT*FROM ... WHERE ... ORDER BY ...)WHERE ROWNUM = 1`?嗯,这可能有用,但看起来很愚蠢,tbh. (4认同)
  • 请注意,与“ORDER BY”结合使用时,这将无法按预期工作,因为排序仅发生在 where 子句之后。换句话说,要获取某个排序查询的顶部,rownum 是完全没有用的。 (2认同)