Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅按where子句、按字符串字段将SQL查询限制为10000个结果_Sql_Openedge_Progress 4gl_Progress Db - Fatal编程技术网

仅按where子句、按字符串字段将SQL查询限制为10000个结果

仅按where子句、按字符串字段将SQL查询限制为10000个结果,sql,openedge,progress-4gl,progress-db,Sql,Openedge,Progress 4gl,Progress Db,我有一个有趣的问题,我正在努力解决 我正在通过web API从数据库检索数据。我可以直接访问DB进行测试,但我的应用程序需要通过API读取数据。在API中,我基本上可以为SQL语句提供where子句,该语句从为web API指定的表中检索数据。我需要以大约10000个数据块的形式检索数据,以避免服务器过载(web服务没有得到优化,检索的结果越多,速度就越慢)。对于大多数表,有一个顺序数字ID字段,我可以用它限制查询。因此,完整查询如下所示: SELECT * FROM TABLE WHERE I

我有一个有趣的问题,我正在努力解决

我正在通过web API从数据库检索数据。我可以直接访问DB进行测试,但我的应用程序需要通过API读取数据。在API中,我基本上可以为SQL语句提供where子句,该语句从为web API指定的表中检索数据。我需要以大约10000个数据块的形式检索数据,以避免服务器过载(web服务没有得到优化,检索的结果越多,速度就越慢)。对于大多数表,有一个顺序数字ID字段,我可以用它限制查询。因此,完整查询如下所示:

SELECT * FROM TABLE WHERE ID > 0 and ID <= 10000
ID2 > '100000' and ID2 <= '101000'
SELECT*从ID>0和ID 0以及ID 0和CAST(ID2为int)的表中,或者
有没有人知道如何使用这个字符串ID字段将检索限制为10000个条目?我相信有一些逻辑可以做到这一点,但我还没能完全理解

where子句中的隐式转换也会返回错误:

(ID2 + 0) > 0 and (ID2 + 0) <= 10000

(ID2+0)>0和(ID2+0)这可能会影响性能,但我能看到的唯一方法是使用子查询:

SELECT * FROM TABLE WHERE ID IN (
    SELECT TOP 10000 ID
    FROM TABLE
    WHERE [someotherfield] >= [last_someotherfield] -- Might lead to duplicates
    ORDER BY [someotherfield]
)

我想我已经弄明白了。通过使用字母排序,我们仍然可以将查询限制为11000个结果。我们只需注意,它开始按第一个数字/字母排序,并忽略ID中数字的位置值。因此,如果一个数字的大小大于10,但以较低的数字开始,则被视为较小:

按字母顺序排序9>100000

因此,我们可以使用这样的where子句:

SELECT * FROM TABLE WHERE ID > 0 and ID <= 10000
ID2 > '100000' and ID2 <= '101000'

ID2>'100000'和ID2'999000'和ID2这有帮助吗?谢谢你的提示,但我实际上是在尝试做文章中建议的事情:使用where子句来限制我的数据。问题在于如何使用where子句可靠地仅返回10000个结果。您查询的表存在严重的设计问题,因为它在本应接受数字的情况下接受字符串输入。没有能力施放或至少用零左键,你基本上已经没有选择了。是的,这里有很多设计问题,但我必须用它们提供的东西。我希望能想出一些逻辑,以某种创造性的方式,使用字母排序来限制结果。在这里发布问题是我最后的选择。这个错误看起来很像是来自通过4GL引擎的查询准备语句。不是SQL引擎。WHERE子句的文档如下:您应该能够在WHERE子句中使用各种4GL函数,而不是SQL函数,例如INTEGER(ID2),但可能会影响性能。感谢您的建议,但是API拒绝子查询就像拒绝显式转换一样。@NikWeiss我已经使用MSSQL和MySQL进行了测试,并且我能够使用隐式转换:
SELECT*FROM TABLE WHERE 0+ID>0和0+ID感谢提示,但是当我尝试这样做时,它给了我一个类型错误。它似乎根本不想进行隐式转换:(
ID2 > '999000' and ID2 <= '999999'