Я хочу использовать синтаксис oracle для выбора только 1 строки из таблицы DUAL
. Например, я хочу выполнить этот запрос:
SELECT user
FROM DUAL
... и у него было бы, например, 40 записей. Но мне нужна только одна запись.... И, я хочу, чтобы это произошло без предложения 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
order by
.
Я нашел это "решение" скрытым в одном из комментариев. Поскольку я искал это некоторое время, я хотел бы выделить его немного (пока не могу комментировать или делать такие вещи...), поэтому я использовал это:
SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1
Это напечатает нужную запись [Column] из последней записи в таблице, предполагая, что [Date] всегда вставлена через SYSDATE.
ROWID
, если вы никогда не удаляете какие-либо записи и всегда заботитесь о последней вставленной / измененной.
Этот синтаксис доступен в 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;
^^ Я просто хотел продемонстрировать, что любая строка или строки (множественное число) могут использоваться независимо от множества требуемого количества строк.)
В Oracle нет условия limit 1
(thats MySQL/PostgresSQL), вам нужно указать where rownum = 1
.
Насколько я знаю, таблица dual
в Oracle - это специальная таблица с одной строкой. Таким образом, этого было бы достаточно:
SELECT user
FROM dual
"FirstRow" - это ограничение и поэтому оно помещается в предложение where
не в предложении select
. И это называется rownum
select * from dual where rownum = 1;
ORDER BY
, так как упорядочивание происходит только после предложения where. Другими словами, чтобы получить вершину определенного отсортированного запроса, rownum совершенно бесполезен.
Where
с View.
Вы должны использовать вложенный запрос как:
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.
Поэтому вы не можете использовать такой запрос: "select * from any_table_x, где rownum = 1 order by any_column_x;" Потому что оракул получает первую строку, а затем применяет порядок by by.
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;
у нас есть 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 nownum= 1
Более гибким, чем select max()
, является:
select distinct first_row(column_x) over (order by column_y,column_z,...) from Table_A
dual
?