2015-09-07 27 views

回答

0

你必须在一个有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使用CROSS JOIN 10 10表组合,我们得到一个1000行线表。以此为基础,我们可以计算所需的@i值的顺序。

Demo here

+0

谢谢:)但是,如果我想选择123450000和123459999之间的数字,我应该如何修改此代码? – Kris

+0

@Kris简单地将'@ i'初始化,即从'CROSS JOIN(SELECT @i:= 999)'更改为'CROSS JOIN(SELECT @i:= 123450000)'。另外,如果您想要10,000个数字而不是1,000个,则必须添加另一个10个值的内联表,以便获得10,000行所需的笛卡尔积。 –

+0

谢谢。完美的解决方案,但是有可能编号从123450000开始并以123459999结束?在你的例子中,以123450001开头,以123460000结尾。 – Kris

0

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

“BETWEEN”关键字会更好用,而不是使用变量吗?

例如,如果你想选择表“mytable的”和“民”行是主键:

SELECT num FROM myTable 
WHERE num BETWEEN 999 AND 1999 
0

下面是一个简单的查询,打印数量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 
+0

谢谢,但无法正常工作:'code'#1064 - 您的SQL语法错误;检查与您的MariaDB服务器版本相对应的手册,以找到在WHILE(@firstNumber <= @ lastNumber)'code'附近使用的正确语法 – Kris