所以我遇到了一个问题,有人要求提供未使用的帐号列表。我为它编写的查询有效,但它有点hacky并且依赖于存在比现有帐户更多记录的表:
{{1}}
这是有效的,因为客户号码被重复使用,并且记录明显多于唯一客户号码。但是,就像我说的那样,它感觉很乱,我想生成一个临时表,其中包含1列和x记录,编号为1到x。我查看了一些递归解决方案,但所有这些解决方案看起来比我最后使用的解决方案更复杂。是否有一种不依赖现有表格的简单方法?
答案 0 :(得分:1)
我认为简单的答案是否定的。为了能够确定缺席,平台需要知道预期的数据集。您可以使用您使用过的方法(或其变体)在运行时生成临时表或数据集 - 或者您可以创建一次参考表,并每次进行比较。我赞成后者 - 一个带有单列整数的表格不会对你的磁盘空间造成太大的影响,一遍又一遍地计算相同的结果集是没有意义的
这是来自Aaron Bertrand的一篇非常好的文章,涉及这个问题:
https://sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1
(编辑:该文章中的查询是特定于TSQL的,但它们应该很容易适应DB2 - 无论平台如何,底层分析都是相关的)
答案 1 :(得分:0)
如果您搜索所有未使用的帐号,则可以执行此操作:
with MaxNumber as
(
select max(cusno) MaxID from custtable
),
RecurceNumber (id) as
(
values 1
union all
select id + 1 from RecurceNumber cross join MaxNumber
where id<=MaxID
)
select f1.* from RecurceNumber f1 exception join custtable f2 on f1.id=f2.cusno