SQL查询以查找行

SQL查询以查找行,sql,database,oracle,Sql,Database,Oracle,我在ORACLE数据库中有一个表mytable,它只有一列Roll\u,如下所示: Roll_no ---------- CD01 0001 CD01 0002 CD01 0004 CD01 0005 CD01 0008 这里CD01是固定的,在CD01之后有一个空格,然后数字写为0001或更高 请查看此处缺少CD01 0003、CD01 0006、CD01 0007,这些是我所需的输出 所需输出: Roll_no ---------- CD01 0003 CD01 0006 CD01 000

我在ORACLE数据库中有一个表mytable,它只有一列Roll\u,如下所示:

Roll_no
----------
CD01 0001
CD01 0002
CD01 0004
CD01 0005
CD01 0008
这里CD01是固定的,在CD01之后有一个空格,然后数字写为0001或更高

请查看此处缺少CD01 0003、CD01 0006、CD01 0007,这些是我所需的输出

所需输出:

Roll_no
----------
CD01 0003
CD01 0006
CD01 0007

如何编写SQL查询来查找这些丢失的字母数字字符?任何想法请

您可以生成完整的编号列表,然后使用“不存在”或“不存在”筛选现有记录。例如:

SELECT new_roll_no
  FROM (SELECT 'CD01 ' || to_char(rownum, 'fm0000') new_roll_no FROM dual 
        CONNECT BY LEVEL <= (SELECT to_number(MAX(substr(roll_no, 6))) FROM T))
 WHERE new_roll_no NOT IN (SELECT roll_no FROM T)
 ORDER BY 1
下面是它的工作原理:

按级别连接是一种技巧性的查询,它将生成高达您指定级别的行。在本例中,我从您的表中选择了最大值。我认为这个问题最初出现在网站上,现在已经相当普遍了。 我已经生成了8行,接下来我将使用TO_CHAR函数使列看起来像您的主键。请参阅该函数的文档。 然后,我将这些生成的值与您的实际表值(不在is反联接中)进行比较
由于字段中的值不是原子的,顺便说一句,这不是一个好主意,我怀疑你能用一个SQL查询实现你想要的结果。你能告诉我SQL查询,我正在尝试,但它没有显示所需的output@marc_s...any想法请告诉我如何才能获得所需的输出?非常感谢您的回答,但当我运行查询时,它在第1行显示错误:ORA-00907:右侧缺失parenthesis@saroj:我少了一个括号,它现在应该可以工作了,我在9ir2上仍然得到一个错误,但它在11GR2中工作了很多…它工作了,只是一个简单解释这些术语的请求:fm0000,按级别连接新卷号?请解释一下抱歉,我没看到文森特的帖子。
select n
  from (select 'CD01' || to_char(rownum, '0009') n
          from dual
    connect by level <= (select max(substr(roll_no, 6)) from mytable))
where n not in (select roll_no from mytable)