2015-09-07 29 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