从大的 id 列表中获取不在表中的 id
Posted
技术标签:
【中文标题】从大的 id 列表中获取不在表中的 id【英文标题】:Get ids not in table from large list of ids 【发布时间】:2015-06-25 16:34:57 【问题描述】:我有大量 ID 需要对照表检查,以查看哪些 onec 不在我的表中。
我写了这个查询:
SELECT id
FROM ( VALUES (1,2,3,4...) AS Checking (id)
WHERE id NOT IN (SELECT UniqueActivityID
FROM UserActivity
WHERE CONVERT(DATE,[Date]) > CONVERT(DATE,'2015-06-24')
)
问题在于查询超时是因为大量的数字(20'000)和/或表大小(+200 万行)。 我可以用一种更好、不那么苛刻的方式来做到这一点吗?
【问题讨论】:
你的 id 存储在表中? 这甚至不是有效的语法。即使这不是有效的语法。 SELECT id FROM ( VALUES (1,2,3,4) 作为检查 (id) ) 您的“日期”列是什么数据类型?如果你给它一个有意义的名字而不是数据类型会更好。现在是几号?这样的通用名称就像有一个名为“int”的列。 你真的在表构造函数中硬编码 20,000 个数字吗?为什么不使用计数表? 您可以使用the answer given here 获取表格中缺少的 ID 表格,然后对照您的列表进行检查。 【参考方案1】:except
关键字是您的朋友。
where somefield in
(select somefield
from whereever
where some conditions are met
except
select somefield
from whereever
where the same conditions are met
and more conditions are met that make you want to exclude the record)
【讨论】:
以上是关于从大的 id 列表中获取不在表中的 id的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 DB2 sql 检查不在两个表中的记录以获取另一个第三个表中的日期?