首页 > 解决方案 > SQL ORDER BY 语句检索较少记录

问题描述

我有一个运行嵌入式 SQL 以从四个连接文件中检索数据的程序。当我尝试按字段(不是关键字段)对记录进行排序时,检索到的记录数从 9,999(子文件的最大值)下降到 113。我运行了相同的 SQL 语句(有和没有 ORDER BY 子句) 在 SQL Server 上,它们都返回了相同数量的记录(超过 9,999)。有没有其他人遇到过这个问题,或者我只是想做太多?

SELECT  cawlaml0.WMAWID,cawlabl0.WBBLCD,cawlaml0.WMCODE,
        SUBSTRING(cawlael0.WEFKEY,1,32) as WEFKEY32,
        SUBSTRING(cawlael0.WETKEY,1,32) as WETKEY32,
        cawlaml0.WMEFFR,cawlaml0.WMEFTO,cawlaml0.WMEFLG,
        cawlaml0.WMUSED,cawladl0.WDEAAL,cawladl0.WDLORG,
        cawladl0.WDLBAL,cawlael0.WEAWLN,cawladl0.WDAWPR

FROM cawlaml0

INNER JOIN cawlabl0
        on cawlaml0.WMAWID = cawlabl0.WBAWID
INNER JOIN cawlael0
        on cawlaml0.WMAWID = cawlael0.WEAWID
LEFT OUTER JOIN cawladl0
        on cawlaml0.WMAWID = cawladl0.WDAWID


WHERE
         // The '@' fields are user input fields.
        (cawlael0.WEFKEY = :@WEFKEY or :@WEFKEY = ' ') and
        (cawlael0.WETKEY = :@WETKEY or :@WETKEY = ' ') and
        (cawlabl0.WBBLCD = :@WBBLCD or :@WBBLCD = ' ') and
        (cawlaml0.WMCODE = :@WMCODE or :@WMCODE = ' ') and
         cawlael0.WEAWLN = cawladl0.WDAWLN

ORDER BY WEFKEY32;

标签: sqldb2-400rpgle

解决方案


好吧,似乎问题不在于 SQL 本身,而在于某些数据。虽然 SQL 可以检索所有记录,但我的 fetch 语句是错误的原因。我将这些字段放入屏幕中,但没有意识到有一条记录(准确地说是第 114 条)的日期错误(WMEFFR 和 WMEFTO)超出了有效范围。

获取语​​句:

EXEC SQL
     FETCH NEXT FROM R1
       INTO :WMAWID,:WBBLCD,:WMCODE,:WEFKEY32,:WETKEY32,
       :WMEFFRA,:WMEFTOA,:WMEFLG,:WMUSED,:WDEAAL,
       :WDLORG,:WDLBAL,:WEAWLN,:WESTAT,:WEAWEX; 

SQL 表:

哈芬数据表

由于该记录在未排序列表中的位置很靠后,直到我尝试排序时我才真正遇到它,所以这个记录在我身上。

谢谢大家的答案!


推荐阅读