【问题标题】:SQL, counting from 0 to 10SQL,从 0 数到 10
【发布时间】:2011-03-11 09:19:11
【问题描述】:

这听起来可能很愚蠢,但我想知道(如果可能的话)如何通过 sql 命令从 0 计数到 10。我的意思是我想要一个 sql 查询,它产生一列由 0 到 10 的数字组成,如下所示:

0
1
2
3
4
5
6
7
8
9
10

我目前正在使用 MySQL 5.0

【问题讨论】:

  • 任何特定的 SQL 方言或 RDBMS?
  • @egrunin,这与前面的问题所做的相同。唯一真正的区别是使用 0-9 作为示例。
  • @Matthew Flaschen:啊,我没有看到@geertjanvdk 的答案,它确实解决了这个问题。我会给它一个 +1 让它上升到顶部 :)

标签: sql mysql


【解决方案1】:

如果您只是想要 exact 值 0 到 10,那么以下将适用于所有 DBMS:

Select Num
From    (
        Select 0 As Num
        Union All Select 1
        Union All Select 2
        Union All Select 3
        Union All Select 4
        Union All Select 5
        Union All Select 6
        Union All Select 7
        Union All Select 8          
        Union All Select 9
        Union All Select 10
        ) As Numbers

也就是说,解决需要连续整数列表的问题的最简单方法是创建一个包含此列表的永久 Numbers 或 Tally 表。这样一来,它是如何填充的就无关紧要了,因为它只需要填充一次。

【讨论】:

    【解决方案2】:
    select number  as n
    from master..spt_values 
    where type='p' 
    and number between 0 and 10
    

    抱歉,我刚刚注意到您使用的是 MYSQL,这只是 MSSQL。

    【讨论】:

    • 那么没有标准的sql语法来完成这样的事情吗?
    • 这只是从 SQL 系统表中读取值,我对 MYSQL 不熟悉,所以我唯一可以建议的是您创建一个数字表 - 我想很多人都会这样做并使用它。跨度>
    • MS SQL Server 中的“标准”方式显然也适用于 MySQL,从 Matthew Flaschen 提到的问题来看,MySQL 中的数字序列。阅读这两个问题,我会说 SPE109 的答案是最好的。创建一个“实用程序”表。在 ms sql server 中,master.dbo.spt_values 中只有 0-2048,并且是 'yuck' 主表。在我的代码中,我创建了自己的表,它始终存在,始终被填充且不会被弄乱。我这样称呼它:从 n >=1 和 n
    【解决方案3】:

    您可以为此使用变量(尽管我不是 100% 清楚您的要求):

    SELECT id, (@i := @i + 1) AS counter FROM <table>,
    (SELECT @i := 0) AS vars WHERE @i <= 10;
    

    您可以包含您喜欢的任何其他列 - 我刚刚以id 为例。如果您从中选择的表至少有 11 行,这将起作用。首先执行带括号的SELECT,并将变量@i初始化为零。

    【讨论】:

    • 对不起,我不熟悉变量。请给我一个包含值 0 到 10 的简单视图
    • 如果拥有一个可以加入现有表的视图的想法纯粹是为了获得一个序列号列表,那么我认为你让自己的事情变得更加困难,同时,涉及不需要的连接。您可以编辑您的问题以明确您的确切要求吗?
    • 这是一种优雅的生成范围的方式
    【解决方案4】:

    使用pl sql我们可以做如下操作

    for i 在 1..1000 循环中

    insert into a values(i,i*2);
    

    结束循环;

    对解决你的疑惑有帮助吗?

    【讨论】:

    • 对不起,我忘了。我想在一个简单的视图中将这些值与一个表外连接,该表没有所有这些值作为 id,我需要所有这些值。当然,我可以创建一个表并逐个插入这些值,但我很好奇可能不需要为这么简单的事情创建另一个表。
    【解决方案5】:

    仅供参考,this answer 表明它可以在 Oracle、PostGres 和 MS Sql 中完成,但不能在 MySQL 中完成,唉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 2011-08-10
      • 2013-11-19
      相关资源
      最近更新 更多