2017-11-30 1 views
0

테이블에 6442670 개의 레코드가 있고 행 번호를 사용하여 jdbctemplate 1000000을 사용하여 테이블을 한꺼번에 가져옵니다. 다음은 내가 4,000,003 에 3,000,002 RowNum 동작

  • 3,000,003에 2,000,001
  • 2000002에 1000000
  • 1000001에 팔 반복

    • 0에서 가져 오는하고

      select * 
      from (select rowNum rn 
            , e.* 
           from table_name e) table_name 
      where rn >= ? and rn <= ? 
      

      쿼리입니다

    • 4000004 to 5000004
    • 5,000,005 여덟 후 7,442,669

    -7000006

  • 6442669-6000005
  • 6,000,006에 반복 나는 목록 만 6,442,668 기록을보고, 이것의 대부분은 중복입니다. rowNum을 사용하여 레코드를 페치하면 동일한 레코드를 여러 번 가져올 수 있습니까?

  • +5

    각 순서대로 반환되는 행은 임의적이므로 '주문 기준'이 없습니다. –

    +0

    그것은 약간의 데이터베이스에서 작동하고 다른 데이터베이스에서는 작동하지 않습니다 – pppavan

    +0

    왜 다른 데이터베이스에서 다른 행동을하는지 궁금합니다 – pppavan

    답변

    1

    ROWNUM 대신 row_number() over 개의 고유 한 열을 사용해보십시오.

    SELECT * 
        FROM (SELECT row_number() OVER (ORDER BY unique_column_s) rn, e.* 
          FROM table_name e) table_name 
    WHERE rn >= ? and rn <= ?