sql - 从列值中查找缺少的键 ID 或数字

标签 sql sql-server database sql-server-2014

需要找到缺失的数字,这些数字已经被删除或者 Column 还没有。

例如:

我有一个表 Named Person 有列 [PersonID] [PersonName]

[PersonID] 是主要的递增数字,例如从 1 到 N。

PersonID            PersonName
1001                       ABC
1002                       ABC
1003                       XYZ
1004                       MNO
1006                       ABC
1008                       MNO
1009                       ABC
1010                       ABC
1011                       XYZ
1014                       ABC
1015                       ABC
1016                       XYZ
1017                       MNO

在给定的表中,列 PersonID 中有一些缺失的数字,例如

1005
1007
1012 
1013

只需要找到丢失的数字。

注意:我的表中有超过2000万条记录。 因此,请建议一种更快的方法来找到所需的数字。

最佳答案

感谢所有支持和分享一些观点的人。我找到了使用 ROWNUMBER()

查找缺失项的方法。
 SELECT
 NOTEXIST  FROM  ( 
 SELECT  ROW_NUMBER() OVER (ORDER BY PERSONID) NOTEXIST ,PERSONID  FROM  #A )  T
 WHERE NOTEXIST NOT IN  ( SELECT PERSONID  FROM  PERSONID )

关于sql - 从列值中查找缺少的键 ID 或数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55514016/

相关文章:

c - 用C模拟数据库

sql - Oracle SQL 转储文件将部分提取到 sql/另一个转储文件

mysql - SUM 后在 SQL 查询中查找 AVG 值 - 组函数的使用无效

sql - 将同一表中的一列的值更新到 SQL Server 中的另一列

mysql - 从列类型 varchar() 获取不同的当前和 future 周数和年份

sql-server - 为什么这个执行计划中排序运算符的成本如此之高?

asp.net-mvc - 在 asp.net 和 ravendb 中处理基于事件的提要的最佳方法

SQL Server 外键不允许我使用级联添加约束(删除或更新时)

sql-server - 如何在sql server中添加一个小时的时间戳(无需声明)

mysql - 学生出勤表结构