簡體   English   中英

如何從oracle sql中只選擇1行?

[英]How to select only 1 row from oracle sql?

我想使用 oracle 語法從表DUAL僅選擇 1 行。 例如,我想執行這個查詢:

SELECT user 
  FROM DUAL

...它應該有 40 條記錄。 但我只需要一張唱片。 ...AND,我想在沒有WHERE子句的情況下實現它。

我需要 table_name 字段中的某些內容,例如:

SELECT FirstRow(user) 
  FROM DUAL

您使用 ROWNUM。

IE。

SELECT user FROM Dual WHERE ROWNUM = 1

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

我發現這個“解決方案”隱藏在其中一條評論中。 由於我查了一段時間,我想強調一下(還不能發表評論或做這樣的事情......),所以這是我使用的:

SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1

這將從表中的最新條目中打印出所需的 [Column] 條目,假設 [Date] 始終通過 SYSDATE 插入。

此語法在 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;

^^我只是想證明無論所需的行數是多少,都可以使用行或行(復數)。)

我們有 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

👌 答案是:

您應該將嵌套查詢用作:

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 * from any_table_x where rownum=1 order by any_column_x;” 因為 oracle 獲取第一行然后應用 order by 子句。

據我所知,Oracle中的dual表是一個只有一行的特殊表。 所以,這就足夠了:

SELECT user
FROM dual

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

"FirstRow" 是一個限制,因此它位於where子句中而不是select子句中。 它被稱為 rownum

select * from dual where rownum = 1;

如果任何行都可以,請嘗試:

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 a.user from (select user from users order by user) a where rownum = 1

將表現最好,另一種選擇是:

select a.user 
from ( 
select user, 
row_number() over (order by user) user_rank, 
row_number() over (partition by dept order by user) user_dept_rank 
from users 
) a 
where a.user_rank = 1 or user_dept_rank = 2

在您想要不同子集的情況下,但我想您也可以使用RANK()但是,我也喜歡row_number() over(...)因為不需要分組。

如果您只想返回具有最少子查詢的排序結果的第一行,請嘗試以下操作:

select *
  from ( select a.*
              , row_number() over ( order by sysdate_col desc ) as row_num
           from table_name a )
  where row_num = 1;

select max()更靈活的是:

select distinct first_row(column_x) over (order by column_y,column_z,...) from Table_A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM