小编典典

选择表中不在特定范围内的值

sql

我有一个带有id列和成千上万行的表。我获得了1000个ID的列表,用于对照其他表格数据进行检查。 ID没有按顺序存储。
ID列表也不按顺序排列。
当我使用这些ID选择表格数据时,仅返回990个结果,这意味着自该列表产生以来,其中10个结果已更改/被删除。如何从该数据范围中找到10个缺失值?这是我目前正在做的事情:

select * from mytable
where theId in (100, 2223, 31, 43321...92199, 14000)

返回990个结果。我可以做类似的事情吗?

select val from (1, 2, 3, 4...999, 1000) 
where val not in (
select * from mytable
where theId in (1, 2, 3, 4...999, 1000)
)

编辑:抱歉造成混乱。我应该提到ID的顺序不是特定的,我只是以数字1000为例。它们以随机顺序排列,而1000只是从更大的表(100,000行)中选择的。


阅读 151

收藏
2021-04-22

共1个答案

小编典典

可能会出现缺少这些ID的任何记录的情况,或者可能存在其他ID小于1或大于1000的其他ID。如果表中有1000条记录,而查询中只有990条记录,则肯定有丢失的记录id小于1或大于1000。因此,这些丢失的记录将出现在以下查询中:

select val from mytable where 
val not in ( select distinct theId from mytable where theId in (1, 2, 3, 4...999, 1000))

更新 :

对于随机ID,您可以执行以下操作:

create table #temp (id int)
insert into #temp values
(501),
(1),
(21),
......
....
(4350)

SELECT t.id
FROM #temp t
LEFT OUTER JOIN mytable mt on t.id = mt.device_id
WHERE mt.id IS NULL

drop table #temp
2021-04-22