gpt4 book ai didi

java - ROW_NUMBER() 没有正确排序记录

转载 作者:行者123 更新时间:2023-11-30 09:42:22 24 4
gpt4 key购买 nike

我必须将数据从 oracle 表复制到文件。

我有一个获取 800k 记录的连接查询,所以我使用 row_number() 函数和 order by 子句生成 4 个文件,每个文件包含 200k。

查询:

SELECT * FROM (
SELECT ROW_NUMBER() OVER ( order by FILE_KEY desc ) rn,
FILE_KEY, ROUTING_NO, INTLROUT_TYPE, ABBR_COUNTRY_CODE_2D, HO_CATALOG_NO
FROM BANK_INTL_ROUT_TBL rout, BANK_INTL_LOC_TBL loc
WHERE loc.CATALOG_NO = rout.FILE_KEY)
WHERE rn BETWEEN start AND end;

参数:

For 1st File  : start =1 ,end = 200000
For 2nd File : start =200001 ,end = 400000
For 3rd File : start =400001 ,end = 600000
For 4th File : start =600001 ,end = 800000

但是当我在 sql 查询浏览器中使用此查询检查最后 10 行时,文件的最后 10 行不同,即文件和 sql 查询浏览器中的顺序不同。

SELECT * FROM (
SELECT ROW_NUMBER() OVER( order by FILE_KEY desc ) rn,
FILE_KEY,ROUTING_NO,INTLROUT_TYPE,ABBR_COUNTRY_CODE_2D,HO_CATALOG_NO
FROM BANK_INTL_ROUT_TBL rout, BANK_INTL_LOC_TBL loc
WHERE loc.CATALOG_NO=rout.FILE_KEY)
WHERE rn BETWEEN 709990 AND 80000;

最佳答案

这可能是因为你有这样的东西

row_number file_key 
799998 same_number
799999 same_number
800000 same_number
800001 same_number
800002 same_number
800003 same_number
800004 same_number

因为您按 file_key 排序。

您如何观察到不同的数据?从你的其他专栏。所以,你可以使用:

SELECT  ROW_NUMBER() OVER(order by FILE_KEY desc, ROUTING_NO, INTLROUT_TYPE, ABBR_COUNTRY_CODE_2D, HO_CATALOG_NO ) rn

或者(第二个原因),您的基表已在您的查询之间更改。

UDPDATE:您可以使用use_hash 提示来加快您的查询。 5 小时对于这个查询来说太多了。

SELECT * FROM (
SELECT /*+use_hash(rout loc)*/
ROW_NUMBER() OVER(order by FILE_KEY desc, ROUTING_NO, INTLROUT_TYPE, ABBR_COUNTRY_CODE_2D, HO_CATALOG_NO ) rn,
FILE_KEY, ROUTING_NO, INTLROUT_TYPE, ABBR_COUNTRY_CODE_2D, HO_CATALOG_NO
FROM BANK_INTL_ROUT_TBL rout, BANK_INTL_LOC_TBL loc
WHERE loc.CATALOG_NO = rout.FILE_KEY)
WHERE rn BETWEEN start AND end;

关于java - ROW_NUMBER() 没有正确排序记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8723546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com