Comment sélectionner une seule ligne de Oracle SQL?

Je veux utiliser la syntaxe Oracle pour sélectionner seulement une ligne de la table DUAL . Par exemple, je veux exécuter cette requête:

 SELECT user FROM DUAL 

… et ça aurait, comme 40 disques. Mais je n’ai besoin que d’un seul enregistrement. … ET, je veux que cela se produise sans clause WHERE .

J’ai besoin de quelque chose dans le champ table_name tel que:

 SELECT FirstRow(user) FROM DUAL 

Vous utilisez ROWNUM.

c’est à dire.

 SELECT user FROM Dual WHERE ROWNUM = 1 

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

J’ai trouvé cette “solution” cachée dans l’un des commentaires. Comme je cherchais pendant un moment, je voudrais le souligner un peu (je ne peux pas encore commenter ou faire ce genre de choses …), alors voici ce que j’ai utilisé:

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

Cela m’imprimera l’entrée [Column] souhaitée dans l’entrée la plus récente de la table, en supposant que [Date] est toujours inséré via SYSDATE.

Cette syntaxe est disponible dans 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; 

^^ Je voulais juste démontrer que les lignes ou les lignes (au pluriel) peuvent être utilisées indépendamment de la pluralité de lignes désirées.)

Pour autant que je sache, la table dual dans Oracle est une table spéciale avec une seule ligne. Donc, cela suffirait:

 SELECT user FROM dual 

Il n’y a pas de condition de limit 1 (c’est MySQL / PostgresSQL) dans Oracle, vous devez spécifier where rownum = 1 .

“FirstRow” est une ressortingction et donc sa place dans la clause where non dans la clause select . Et ça s’appelle le rownum

 select * from dual where rownum = 1; 

La réponse est:

Vous devez utiliser une requête nestede comme:

 SELECT * FROM ANY_TABLE_X WHERE ANY_COLUMN_X = (SELECT MAX(ANY_COLUMN_X) FROM ANY_TABLE_X) 

=> En PL / SQL “ROWNUM = 1” N’EST PAS égal à “TOP 1” de TSQL.

Vous ne pouvez donc pas utiliser une requête comme celle-ci: “sélectionnez * from any_table_x où rownum = 1 order by any_column_x;” Oracle obtient la première ligne, puis applique la clause order by.

Si une ligne le faisait, essayez:

 select max(user) from table; 

Non où clause.

 select name, price from ( select name, price, row_number() over (order by price) r from items ) where r between 1 and 5; 

Nous avons 3 choix pour obtenir la première ligne dans la table Oracle DB.

1) select * from table_name where rownum= 1 est le meilleur moyen

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

3)

  select * from ( select * from table_name order by id ) where nownum= 1 

Plus flexible que select max() est:

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