You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server脚本未返回全部未使用整数,求助排查原因

问题原因与解决方案

为什么原脚本没返回4、5、6这类空缺数字?

你的SQL脚本逻辑是只检查每个已存在plu的下一个数字是否未被使用:

  • 现有plu=2,检查3是否存在,不存在就返回3
  • 现有plu=10,检查11是否存在,不存在就返回11

但像4、5、6这些数字,它们不是任何已存在plu的「下一个数」(现有plu里没有3,脚本根本不会去检查3+1=4是否存在),自然不会被筛选出来。这种写法只能捕获紧邻现有值的单个空缺,无法找出连续范围里的中间空缺。

正确的查询方式

要找出所有未被使用的数字(包括连续空缺的中间值),可以用递归CTE生成从最小plu到最大plu之间的所有连续数字,再筛选出不在现有plu列表中的值:

WITH RECURSIVE plu_range AS (
    -- 从现有plu的最小值开始生成序列
    SELECT MIN(plu) AS num FROM tovary WHERE plu > 0
    UNION ALL
    -- 递归生成连续数字,直到现有plu的最大值
    SELECT num + 1 FROM plu_range
    WHERE num + 1 <= (SELECT MAX(plu) FROM tovary WHERE plu > 0)
)
-- 筛选出未被使用的plu数字
SELECT num AS unused_plu
FROM plu_range
WHERE num NOT IN (SELECT plu FROM tovary WHERE plu > 0)
ORDER BY num;

如果需要从数字1开始查找(而非现有plu的最小值),只需把递归起始的MIN(plu)改成1即可。

内容的提问来源于stack exchange,提问作者Taliga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:35:28