gpt4 book ai didi

sql - 仅通过 where 子句,通过字符串字段将 SQL 查询限制为 10,000 个结果

转载 作者:行者123 更新时间:2023-12-04 01:15:04 25 4
gpt4 key购买 nike

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

我正在通过网络 API 从数据库中检索数据。我可以直接访问数据库进行测试,但我的应用程序需要通过 API 读取数据。在 API 中,我基本上可以为从我为 Web API 指定的表中检索数据的 SQL 语句提供 where 子句。我需要以 ~10,000 block 为单位检索数据,以免服务器过载(Web 服务未优化,并且检索的结果越多,速度就越慢)。对于大多数表,有一个连续的数字 ID 字段,我可以用它来限制我的查询。所以完整的查询看起来像这样:

SELECT * FROM TABLE WHERE ID > 0 and ID <= 10000

我只能通过 API 提供该查询的 where 子句组件。

ID > 0 and ID <= 10000

对于一个特定的表,通常的 ID 字段不可用。有一个不同的 ID 字段,它也包含顺序数值,但该字段是 String 类型。由于我提供给 Web API 的 where 子句是作为某种准备语句处理的,因此它不会处理任何函数。所以我无法将 ID 转换为 int:

CAST(ID2 as int) > 0 and CAST(ID2 as int) <= 10000

如果我对字符串值使用 > 或 < 比较,它将遵循字母顺序,并且您会遇到烦人的行为,例如 2,000 大于 100,000。这打破了我之前一直使用的逻辑。

有没有人知道如何使用此字符串 ID 字段将我的检索限制为 10,000 个条目?我确信有一些逻辑可以做到这一点,但我一直无法理解它。

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

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

ID2 字段中的值范围从 ~140,000 到 ~3,500,000。

我很乐意听到任何想法或建议!如果有任何不清楚的地方,请告诉我。

最佳答案

这可能会影响性能,但我能看到的唯一方法是使用子查询:

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

关于sql - 仅通过 where 子句,通过字符串字段将 SQL 查询限制为 10,000 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63600804/

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