Oracle 未按相同顺序检索数据

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点的结果不同。唱片被洗牌了。顺序不一致 为了解决这个问题,我使用

我有一个返回模拟人生列表的查询。每个SIM卡都链接到一个客户。SIM卡在T_SIM表中,客户在T_客户表中。一个客户可以连接多个SIM卡。当返回模拟人生时,它还返回客户详细信息

T_SIM表将有一个指向T_CUSTOMER表的外键

问题是:

首先运行查询,通过按客户代码按升序进行排序来请求前100条记录。 现在运行相同的查询,通过按客户代码按升序排序来请求前1000条记录。 在第2点中,在1000条记录的结果中,前100条记录与第1点的结果不同。唱片被洗牌了。顺序不一致

为了解决这个问题,我使用了ROWID和orderbycustomer\u代码

但客户不接受该解决方案

请您提出其他解决问题的方案。客户代码的数据类型为VARCHAR2

以下是查询:

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