[sql] Oracle SQL에서 한 행만 선택하는 방법은 무엇입니까?

oracle 구문을 사용하여 table에서 한 행만 선택하고 싶습니다 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


답변

댓글 중 하나에 숨겨진이 “솔루션”을 찾았습니다. 잠시 동안 그것을 찾고 있었기 때문에 나는 그것을 조금 강조하고 싶습니다 (아직 주석을 달거나 그런 일을 할 수 없습니다 …), 그래서 이것은 내가 사용한 것입니다 :

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

이렇게하면 [Date]가 항상 SYSDATE를 통해 삽입된다고 가정하고 테이블의 최신 항목에서 원하는 [Column] 항목이 인쇄됩니다.


답변

이 구문은 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 DB 테이블의 첫 번째 행을 가져 오기 위해 세 가지 선택 사항이 있습니다.

1) select * from table_name where rownum= 1가장 좋은 방법

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

삼)

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


답변

내가 아는 dual한 Oracle 의 테이블은 행이 하나 뿐인 특수 테이블입니다. 따라서 이것으로 충분합니다.

SELECT user
FROM dual


답변

? 대답은 다음과 같습니다.

중첩 된 쿼리를 다음과 같이 사용해야합니다.

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 절을 적용합니다.


답변

limit 1Oracle 에는 조건 (MySQL / PostgresSQL)이 없으므로 지정해야합니다.where rownum = 1 .