【问题标题】:Select or print column values that don’t exist between two integers选择或打印两个整数之间不存在的列值
【发布时间】:2019-02-08 12:16:35
【问题描述】:

我有一个大约 10k 个连续整数值的列表,这些值应该从外部应用程序插入到表列中。但是,执行 COUNT() 会发现只插入了 9900 个。

我需要确定序列中的哪些数字没有插入。

反之使用它很容易,只需从值为 BETWEEN x AND y 的表列中选择,但我还没有弄清楚如何打印(或选择)表列中不存在的值.

编辑:从下面的整数中删除多余的 ''

SELECT * FROM table 
WHERE column1 = 'value'
AND column2 BETWEEN 1 AND 10000

如何打印 BETWEEN 子句中 column2 在范围内没有值的值?

【问题讨论】:

  • 预期输出为 4444、6789 等
  • 你在使用oracle吗?
  • 是的,我正在使用 Oracle
  • 不要将数字指定为字符串。 '1' 是一个字符串常量,1 是一个数字。比较起来,'10' 小于'2',而10 大于2

标签: sql oracle


【解决方案1】:

你可以这样做:

select level num
from   dual
connect by level <= 10000
minus
select column2
from   your_table;

如果您的 column2 是 varchar2 列,您可能需要执行 to_char(level)

【讨论】:

    【解决方案2】:

    您需要使用数字来源。如果此表是您唯一的数据,您可以使用它:

    with n as (
          select rownum as n
          from t cross join
               (select 1 from dual union all select 2 from dual) x
         )
    select n.n
    from n left join
         t
         on n.n = t.column2 and t.column1 = 'value'
    where n <= 10000;
    

    n 的计算假设您的表至少有 5,000 行。如果超过 10,000,则不需要 x

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      相关资源
      最近更新 更多