2012-02-15 109 views
0

我有一个包含数字的表,范围在1-1000之间,它们是唯一的,但是我需要使用Oracle SQL从表中确定1-1000范围内哪些数字缺失,Oracle SQL,范围在1-1000之间

1,3,4,5,6,8,9,10

结果2,7

任何人都可以用一个脚本或URL到一个脚本帮助?

+2

11,12等等呢?他们是不是也错过了? – 2012-02-15 16:04:19

+0

不,因为计数还没有那么高,但我可以使用max(SheetNo)作为高点。 – icecurtain 2012-02-15 16:06:53

回答

2

你可以使用:

select level from dual 
connect by level<=1000 
minus 
select mycolumn from mytable 

编辑:

要找出哪些号码是从序列丢失,而不硬编码1000:

select level from dual 
connect by level < (select max(mycolumn) from mytable) 
minus 
select mycolumn from mytable 
+0

+1。好主意 – 2012-02-15 16:07:48

+0

这正是我需要的感谢。 – icecurtain 2012-02-15 16:16:07

0

尝试:

select a.check_number 
from (select level check_number from dual connect by level <= 1000) a 
where not exists 
(select null from myTable t where a.check_number = t.lookup_number) 
0
with numbers as (
    select level as i 
    from dual 
    connect by level <= (select max(some_number) from your_table) 
) 
select nr.i as missing 
from numbers nr 
    left join your_table yt on yt.some_number = nr.i 
where yt.some_number is null;