我有一个带有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行)中选择的。
可能会出现缺少这些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