日期:2014-05-20  浏览次数:20852 次

数据库查询(求助-在线等各位大侠了)
问题是这样的, 数据库中 有几万条数据 ,以上是数据编号,但不是主键
00001
00002
00003
00004
00005

00007
00008
00009

00011
...
以上数据 生成时是连续的,由于删除了数据,所以就会产生断号,就像会计制单断号一样,现在要把那些不存在的号查询出来,要怎么查,用Linq,sql 不限……

------解决方案--------------------

C# code

            List<int> list = new List<int>() {1,3,5,6,7,8,10 };
            var query = Enumerable.Range(list.Min(), list.Max() - list.Min()+1).Except(list);
            query.ToList().ForEach(p => Console.WriteLine(p));

------解决方案--------------------
还真想不出好的方法
就是集合的减法,但实现基本和上边的一样
------解决方案--------------------
探讨

引用:
还真想不出好的方法
就是集合的减法,但实现基本和上边的一样

是啊, 看似很简单的问题,还真 不好解决
虽然大家没有给出解决方法, 我知道 大家还是在帮我想这个问题, 辛苦大家啦!

------解决方案--------------------
SQL:select 编号 from tableName
根据上面的sql查找出来编号,放到一个集合当中,如上面方法进行相应的处理不就完了么
------解决方案--------------------
帮LZ顶下
------解决方案--------------------
SQL code
CREATE TABLE TB(col CHAR(5))
INSERT dbo.TB
SELECT '00001' UNION ALL
SELECT '00002' UNION ALL
SELECT '00003' UNION ALL
SELECT '00004' UNION ALL
SELECT '00005' UNION ALL
SELECT '00007' UNION ALL
SELECT '00008' UNION ALL
SELECT '00009' UNION ALL
SELECT '00011'
;
DECLARE @n AS INT
SELECT @n=MAX(col) FROM dbo.TB
;
WITH cte 
AS
(
    SELECT 1 AS n
    UNION ALL
    SELECT n+1 FROM cte WHERE n<@n
)
SELECT  RIGHT('0000' + CONVERT(VARCHAR(5), n), 5)
FROM    cte
WHERE   n NOT IN ( SELECT   col
                   FROM     dbo.TB )

DROP TABLE dbo.TB
/*
---------
00006
00010

(2 行受影响)*/