如何使用SQL创建临时数字表?

时间:2017-07-27 22:14:52

标签: sql db2

所以我遇到了一个问题,有人要求提供未使用的帐号列表。我为它编写的查询有效,但它有点hacky并且依赖于存在比现有帐户更多记录的表:

{{1}}

这是有效的,因为客户号码被重复使用,并且记录明显多于唯一客户号码。但是,就像我说的那样,它感觉很乱,我想生成一个临时表,其中包含1列和x记录,编号为1到x。我查看了一些递归解决方案,但所有这些解决方案看起来比我最后使用的解决方案更复杂。是否有一种不依赖现有表格的简单方法?

2 个答案:

答案 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