从大的 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的主要内容,如果未能解决你的问题,请参考以下文章

返回不在 Oracle 表中的提供值列表

如何使用 DB2 sql 检查不在两个表中的记录以获取另一个第三个表中的日期?

如何使用 SQL Server 返回不在表中的 id

SQL查询以查找ID不在另一个表中的记录

Laravel 8 验证输入,用于排除不在表中的数据,必须为大写,并格式化 id

SQL:连接两个表 - 结果表应列出所有 ID(即使是那些不在连接表中的 ID)