Как выбрать только 1 строку из оракула SQL? - PullRequest
89 голосов
/ 19 января 2012

Я хочу использовать синтаксис оракула, чтобы выбрать только 1 строку из таблицы DUAL.Например, я хочу выполнить этот запрос:

SELECT user 
  FROM DUAL

... и он будет иметь около 40 записей.Но мне нужна только одна запись.... И я хочу, чтобы это произошло без предложения WHERE.

Мне нужно что-то в поле table_name, например:

SELECT FirstRow(user) 
  FROM DUAL

Ответы [ 11 ]

151 голосов
/ 19 января 2012

Вы используете ROWNUM.

т.е.

SELECT user FROM Dual WHERE ROWNUM = 1

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

35 голосов
/ 30 июля 2014

Я нашел это «решение» скрытым в одном из комментариев.Так как я какое-то время искал это, я хотел бы немного выделить его (пока не могу комментировать или делать такие вещи ...), поэтому я использовал это:

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

Это напечатает мне желаемую запись [Столбец] из самой новой записи в таблице, при условии, что [Дата] всегда вставляется через SYSDATE.

26 голосов
/ 11 апреля 2017

Этот синтаксис доступен в 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;

^^ Я просто хотел продемонстрировать, что можно использовать строку или строки (множественное число) независимо от множества желаемого количества строк.)

7 голосов
/ 19 января 2012

Насколько я знаю, таблица dual в Oracle - это специальная таблица с одной строкой.Итак, этого будет достаточно:

SELECT user
FROM dual
6 голосов
/ 09 января 2014

? Ответ:

Вы должны использовать вложенный запрос как:

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

=> В PL / SQL "ROWNUM = 1" НЕ равно "TOP 1" TSQL.

Таким образом, вы не можете использовать запрос, подобный следующему: «выберите * из any_table_x, где rownum = 1 заказ по any_column_x;» Поскольку оракул получает первую строку, то применяется порядок по предложению.

5 голосов
/ 26 декабря 2017

у нас есть 3 варианта получения первой строки в таблице БД Oracle.

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
5 голосов
/ 19 января 2012

«FirstRow» является ограничением, и поэтому его место в предложении where отсутствует в предложении selectИ это называется rownum

select * from dual where rownum = 1;
5 голосов
/ 19 января 2012

В Oracle нет условия limit 1 (то есть MySQL / PostgresSQL), вам нужно указать where rownum = 1.

2 голосов
/ 19 января 2012

Если какая-то строка подойдет, попробуйте:

select max(user)  
from table;

Нет, где пункт.

1 голос
/ 24 августа 2015
select name, price
  from (
    select name, price, 
    row_number() over (order by price) r
      from items
  )
where r between 1 and 5; 
...