在SQL数据库中找到一个漏洞

时间:2013-12-09 17:34:42

标签: sql sql-server tsql

我有一个包含有关乐器的基本信息的数据库。每个仪器都有仪器ID(000000-999999),这是它的唯一标识符。我需要找到的仪器ID中有一些漏洞。我可以编写一个SQL查询来查找仪器ID列中存在间隙的位置吗?如果我能找到最大的孔(缺少大多数仪器)将会非常有用。我一直在寻找答案,但似乎大多数解决方案涉及两个带连接的表,其中此实例仅在1个表上。谢谢!

1 个答案:

答案 0 :(得分:0)

这可以是一个开始:

;
WITH    Instrument  AS
(       SELECT  Id
        FROM    ( VALUES
                ( 01 ),
                ( 02 ),
                ( 03 ),
                ( 05 ),
                ( 09 ),
                ( 10 ) ) AS Sample (Id)

),      Sequence AS
(       SELECT  MIN(Id) Start,
                MAX(Id) Finish
        FROM    Instrument
        UNION ALL
        SELECT  Start + 1,
                Finish
        FROM    Sequence
        WHERE   Start < Finish
)
SELECT      Sequence.Start
FROM        Sequence
LEFT JOIN   Instrument
        ON  Sequence.Start = Instrument.Id
WHERE       Instrument.Id IS NULL