Oracle 未按相同顺序检索数据
我有一个返回模拟人生列表的查询。每个SIM卡都链接到一个客户。SIM卡在T_SIM表中,客户在T_客户表中。一个客户可以连接多个SIM卡。当返回模拟人生时,它还返回客户详细信息 T_SIM表将有一个指向T_CUSTOMER表的外键 问题是: 首先运行查询,通过按客户代码按升序进行排序来请求前100条记录。 现在运行相同的查询,通过按客户代码按升序排序来请求前1000条记录。 在第2点中,在1000条记录的结果中,前100条记录与第1点的结果不同。唱片被洗牌了。顺序不一致 为了解决这个问题,我使用了ROWID和orderbycustomer\u代码 但客户不接受该解决方案 请您提出其他解决问题的方案。客户代码的数据类型为VARCHAR2 以下是查询:Oracle 未按相同顺序检索数据,oracle,sql-order-by,Oracle,Sql Order By,我有一个返回模拟人生列表的查询。每个SIM卡都链接到一个客户。SIM卡在T_SIM表中,客户在T_客户表中。一个客户可以连接多个SIM卡。当返回模拟人生时,它还返回客户详细信息 T_SIM表将有一个指向T_CUSTOMER表的外键 问题是: 首先运行查询,通过按客户代码按升序进行排序来请求前100条记录。 现在运行相同的查询,通过按客户代码按升序排序来请求前1000条记录。 在第2点中,在1000条记录的结果中,前100条记录与第1点的结果不同。唱片被洗牌了。顺序不一致 为了解决这个问题,我使用
SELECT TT.SIM_ID,
TT.IMSI,
TT.MSISDN,
TT.SECONDARY_MSISDN,
TT.CUSTOMER_ID,
TT.SIM_STATE,
TCU.CUSTOMER_CODE
FROM T_SIM TT
LEFT OUTER JOIN T_CUSTOMER TCU
ON TT.CUSTOMER_ID = TCU.CUSTOMER_ID
WHERE 1 = 1
AND TT.SIM_ID IN
(SELECT SIM_ID
FROM
(SELECT *
FROM
(SELECT Z.*,
ROWNUM RNUM
FROM
(SELECT TT.SIM_ID
FROM T_SIM TT
LEFT OUTER JOIN T_CUSTOMER TCU
ON TT.CUSTOMER_ID = TCU.CUSTOMER_ID
WHERE 1 =1
ORDER BY TCU.CUSTOMER_CODE ASC
) Z
WHERE ROWNUM <= 1000
)
WHERE RNUM >= 0
)
)
ORDER BY TCU.CUSTOMER_CODE ASC
这两种情况下的结果都是按客户代码顺序进行的,但属于它们的sim卡的顺序不一样。问题是,首先在从t sim卡选择时限制行数,因此这些行是随机选择的,然后才对输出进行排序。
所以,您应该做的是删除rownumwhere您的客户代码是VARCHAR2还是NUMBER@Exhausted这不要紧,应该是一致的。请发布您正在使用的完整查询。@Barmar我想告诉您的是,当VARCHAR2列填充数字并尝试使用order by时,结果将与带有数字的列不同。请发布您的查询,很可能您正在生成Rownumal,因此我在回答中没有提到这一点,但将条件rnum>=0的要点是什么?对我来说没有意义
select * from
( TT.SIM_ID,
TT.IMSI,
TT.MSISDN,
TT.SECONDARY_MSISDN,
TT.CUSTOMER_ID,
TT.SIM_STATE,
TCU.CUSTOMER_CODE
FROM T_SIM TT
LEFT OUTER JOIN T_CUSTOMER TCU
ON TT.CUSTOMER_ID = TCU.CUSTOMER_ID
WHERE 1 = 1
AND TT.SIM_ID IN
(SELECT SIM_ID
FROM
(SELECT *
FROM
(SELECT Z.*,
ROWNUM RNUM
FROM
(SELECT TT.SIM_ID
FROM T_SIM TT
LEFT OUTER JOIN T_CUSTOMER TCU
ON TT.CUSTOMER_ID = TCU.CUSTOMER_ID
WHERE 1 =1
ORDER BY TCU.CUSTOMER_CODE ASC
) Z
)
WHERE RNUM >= 0
)
)
ORDER BY TCU.CUSTOMER_CODE ASC
) where rownum<1000