如何从oracle sql中只select1行?
我想使用oracle语法从表DUAL
只select1行。 例如,我想执行这个查询:
SELECT user FROM DUAL
它会有40条logging 但我只需要一个logging。 …而且,我想在没有WHERE
子句的情况下实现它。
我需要在table_name字段中的东西,如:
SELECT FirstRow(user) FROM DUAL
你使用ROWNUM。
即。
SELECT user FROM Dual WHERE ROWNUM = 1
http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
我发现这个“解决scheme”隐藏在其中一个评论中。 自从我查了一会儿,我想突出一点(不能评论或做这样的事情…),所以这是我用的:
SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1
这会从表中最新的条目中打印出所需的[Column]条目,假定[Date]总是通过SYSDATE插入。
在Oracle中没有limit 1
条件(即MySQL / PostgresSQL),您需要指定where rownum = 1
。
“FirstRow”是一个限制,因此它在where
子句中不在select
子句中。 这就是所谓的rownum
select * from dual where rownum = 1;
据我所知,Oracle中的dual
表是只有一行的特殊表。 所以,这就足够了:
SELECT user FROM dual
这个语法在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;
^^我只是想certificate行或行(复数)可以被使用而不pipe所需的行数是多less)。
答案是:
你应该使用嵌套查询:
SELECT * FROM ANY_TABLE_X WHERE ANY_COLUMN_X = (SELECT MAX(ANY_COLUMN_X) FROM ANY_TABLE_X)
=>在PL / SQL中,“ROWNUM = 1”不等于TSQL的“TOP 1”。
所以你不能使用这样的查询:“select any from any_table_x where rownum = 1 order by any_column_x;” 因为oracle得到第一行然后应用子句的顺序。
如果有任何行会做,请尝试:
select max(user) from table;
没有where子句。
select name, price from ( select name, price, row_number() over (order by price) r from items ) where r between 1 and 5;
比select max()
更灵活的是:
select distinct first_row(column_x) over (order by column_y,column_z,...) from Table_A