我在ORACLE数据库中有一个表mytable
,只有一列Roll_no
如下:
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查询以找出这些缺少的字母数字字符?有任何想法
答案 0 :(得分:5)
您可以生成完整的数字列表,然后使用NOT EXISTS(或NOT IN)过滤现有记录。例如:
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
以下是它的工作原理:
答案 1 :(得分:1)
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)