【问题标题】:Find an unused number in a bunch of numbers在一堆数字中找到一个未使用的数字
【发布时间】:2010-12-20 22:26:19
【问题描述】:

我有一张巨大的桌子,里面装满了数字 (1001001..1009999),而且该区域肯定有一堆未使用的数字。所以,我可以通过以下方式返回所有这些数字:

SELECT MY_IDENTIFIER FROM MY_TABLE

这将返回所有使用的数字。如何从该表中获取未使用号码的列表?我使用 JavaScript 在服务器端(rhino/jaxer)工作,我的数据库是 Oracle 10g。

谢谢,

【问题讨论】:

  • 您需要某种报告,还是需要以编程方式使用它们?
  • 扩展@Eric 的评论:你想要SQL 还是Javascript 的解决方案?
  • 我更喜欢两者,但更喜欢它背后的想法,所以我可以申请多种语言。
  • @Eric:我需要他们以编程方式使用。基本上,一个免费号码将是用于记录条目的下一个 id。
  • 下面的查询是你的朋友,选择第一个值即可。

标签: javascript sql oracle oracle10g


【解决方案1】:

以下查询将为您提供所需的内容:

SELECT seq_num
  FROM (SELECT (lvl + &&v_from - 1) seq_num
          FROM (SELECT *
                  FROM (    SELECT LEVEL lvl
                              FROM DUAL
                        CONNECT BY LEVEL <= (&&v_to - &&v_from) + 1)))
 WHERE seq_num NOT IN (SELECT my_identifier FROM my_table);

将 &&v_to 和 &&v_from 替换为您的边界编号。

参考:http://oraqa.com/2006/01/20/how-to-generate-sequence-numbers-between-two-numbers/

【讨论】:

    【解决方案2】:

    Javascript 与此无关,不是吗? 几年前我做过类似的事情。

    我有一个表格,其中包含一个范围内的所有数字,并将这两个表格连接起来并选择了那些无法连接的数字。否定选择。

    类似

     select nr bulk collect into nrs1 from tbl1 where nr not in
                    (select nr from tbl2);
    

    【讨论】:

      猜你喜欢
      • 2015-06-29
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多