【问题标题】:What is the benefit of creating a SQL table that has numbers 1 to 500,000 listed?创建一个列出数字 1 到 500,000 的 SQL 表有什么好处?
【发布时间】:2016-05-02 14:38:10
【问题描述】:

我今天在 TFS 数据库中寻找并尝试运行一些统计数据,结果发现了一个名为 tbl_Number 的表。此表包含一列Number,所有值都只是值 1 到 500,000。正如您在我在 LinqPad 中运行的查询的屏幕截图中看到的那样,所有值都与列表中它们各自的索引不同:

Tbl_Numbers.Max(x => x.Number).Dump(); //max value
Tbl_Numbers.Count().Dump(); //number of entries
var asList = Tbl_Numbers.ToList();
asList.Where(x => asList[x.Number - 1].Number != x.Number).Any().Dump();
//False shows that every entry matches the value at its ordinal location in the list

我的问题是:这样一张桌子有什么用?这是为了防止其中一个引用的数字由于某种原因需要更改吗?从这个表中识别一个数字的唯一方法是使用相同的数字,所以我看不出这个表有什么用。

我意识到这个问题可能会导致猜想的答案,但我很想看看这里是否使用了一些我不知道的编程原理。

【问题讨论】:

  • 也许很有趣? stackoverflow.com/a/29969124/3184785。在“交叉连接”中用于生成“可以从列表中的整数位置计算的任何内容”列表。
  • @RyanVincent 啊,我现在知道这对编写 sql 语句有什么用处,感谢您的链接!
  • 查看此问题及其链接、评论和答案...dba.stackexchange.com/questions/11506/…
  • 这些被称为“Tally”表。它们允许您预先生成一些东西的系列,因此您可以生成新系列。即:您可以“从tallyTable 中选择dateadd(d, number-1, getdate()),其中number

标签: mysql sql-server database


【解决方案1】:

它可用于 OUTER JOINS 以确保您始终获得给定范围内的所有数字,即使没有与该数字相关的数据。

例如,假设我想返回上次订单中购买了 3,4 或 5 件产品的客户数量。但实际上,没有购买过 4 件产品的客户。如果我只是对我的数据进行计数查询,我根本不会得到购买 4 种产品的客户的行。

但是,如果我查询我的 numbers 表并 LEFT JOIN 到我的数据,我将得到数字 4,计数为 0 或 NULL,具体取决于我编写查询的方式。

顺便说一句,人们也经常使用日期表来做这件事。

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多