查找SQL数据库中的漏洞
我有一个数据库,其中包含有关仪器的基本信息。每个仪表都有仪表id 000000-999999,这是其唯一标识符。我需要在仪器ID上找到一些孔。我是否可以编写SQL查询来查找仪器id列中的间隙?如果我能找到丢失仪器最多的最大孔,那将非常有帮助。我已经到处寻找这个问题的答案,但似乎大多数解决方案都涉及两个带有连接的表,其中这个实例仅在一个表上。谢谢 这可以是一个开始:查找SQL数据库中的漏洞,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个数据库,其中包含有关仪器的基本信息。每个仪表都有仪表id 000000-999999,这是其唯一标识符。我需要在仪器ID上找到一些孔。我是否可以编写SQL查询来查找仪器id列中的间隙?如果我能找到丢失仪器最多的最大孔,那将非常有帮助。我已经到处寻找这个问题的答案,但似乎大多数解决方案都涉及两个带有连接的表,其中这个实例仅在一个表上。谢谢 这可以是一个开始: ; WITH Instrument AS ( SELECT Id FROM ( VALU
;
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
我会担心递归CTE和自反半联接将如何在具有数十万行的表上执行。我认为它的伸缩性会更好。我可能会使用一个左连接到数据表的计数表。数据表中ID匹配的任何空值都是数据中的漏洞。非常容易理解,而不是递归。谢谢!马丁-史密斯链接工作得很好。对于任何其他可能想要使用它的人,如果不需要,请从查询中删除WHERE status=0。