【问题标题】:MySQL select 1000 increment numbersMySQL选择1000个增量数字
【发布时间】:2015-09-07 09:45:41
【问题描述】:

是否有可能选择增量数字,例如:

num
1000
1001
1002
1003
1004
...
1999

我试过了:

set @i=999;
select @i:=@i+1 as num
limit 1000

还有:

set @i=999;
select @i:=@i+1 as num
where @i <1999;

【问题讨论】:

    标签: mysql increment


    【解决方案1】:

    你必须对一个 1000 行的表进行操作才能得到你想要的:

    SELECT @i := @i+1 AS num
    FROM (
      SELECT 1 AS x UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 AS x UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
    ) AS t
    CROSS JOIN (
      SELECT 1 AS x UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 AS x UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
    ) AS s
    CROSS JOIN (
      SELECT 1 AS x UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 AS x UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
    ) AS u
    CROSS JOIN (SELECT @i := 999) AS var
    

    在 10 x 10 x 10 的表格组合上使用 CROSS JOIN,我们会得到一个 1000 行的内联表格。以此为基础,我们可以计算出所需的@i 值序列。

    Demo here

    【讨论】:

    • 谢谢 :) 但是如果我想选择介于 123450000 和 123459999 之间的数字,我应该如何修改此代码?
    • @Kris 只需将@i 初始化,即从CROSS JOIN (SELECT @i := 999) 更改为CROSS JOIN (SELECT @i := 123450000)。此外,如果您想要 10,000 个数字而不是 1,000 个,则必须添加另一个 10 值的内联表,以便获得所需的 10,000 行的笛卡尔积。
    • 谢谢。完美的解决方案,但是编号是否可能以 123450000 开头并以 123459999 结尾?在您的示例中,从 123450001 开始,到 123460000 结束。
    • 这个查询是否有可能插入:INSERT INTO tbl (num) your_awesome_select
    • @Kris 是的,这很简单:看here
    【解决方案2】:

    我假设(可能是错误的)您正在尝试根据自动递增的主键选择行,看到这是 MySQL 吗?

    “BETWEEN”关键字会比使用变量更好用吗?

    例如,如果您想从表 'myTable' 中选择行,并且 'num' 是主键:

    SELECT num FROM myTable
    WHERE num BETWEEN 999 AND 1999
    

    【讨论】:

      【解决方案3】:

      这是一个简单的查询,用于打印具有设定增量值的数字 1000 - 1999。

      DECLARE @firstNumber INT
      DECLARE @lastNumber INT
      DECLARE @incrementBy INT
      
      SET @firstNumber = 1000
      SET @lastNumber = 1999
      SET @incrementBy = 1
      
      CREATE TABLE #TEMP ( number INT) 
      
      WHILE(@firstNumber <= @lastNumber)
      BEGIN
          INSERT INTO #TEMP VALUES (@firstNumber)
          SET @firstNumber = @firstNumber + @incrementBy
      END
      
      SELECT * FROM #TEMP
      
      DROP TABLE #TEMP
      

      【讨论】:

      • 谢谢,但不起作用:code#1064 - 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 'WHILE(@firstNumber code 附近使用的正确语法
      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      相关资源
      最近更新 更多