2015-11-03 30 views
0

我有其where子句中使用的變量的查詢:MySQL的迴路爲使用遞增變量執行查詢

SET @id = 1; 

SELECT 
    id, 
    value 
FROM myTable 
WHERE id = @id; 

我想運行查詢爲@id值1到100,然後聯盟(或以某種方式將所有循環結果合併)成一個結果集。這可能在MySQL中,如果是這樣,什麼是一個好方法?

回答

1

爲什麼會使用這個變量?只需使用一個簡單的where條款:

select id, value 
from myTable 
where id between 1 and 100; 

相反,如果你真的ID希望第一個100行,然後用order bylimit

select id, value 
from myTable 
order by id 
limit 100; 
+0

查詢被簡化例如本修訂 – bsapaka

+1

作出這樣的是,那麼你發佈一個新問題,那就沒辦法了。複雜=很好 – Drew

+0

@bsapaka。 。 。問另一個更能代表你需要的問題。 –

0

只需使用一個子查詢來獲取變量。

並把更復雜的查詢的where

SELECT * 
FROM 
    (
    SELECT 
     @rownumber := if(@rownumber, @rownumber + 1, @rownumber + 1) AS id, 
     value 
    FROM myTable 
    CROSS JOIN (select @rownumber := 0) r 
    ) as T 
WHERE id < 100; 
+0

評估順序無法保證,這可能會導致在選擇查詢中使用變量時出現問題。這是明確建議不要做 –

+0

@JohnRuddell我不是100%確定這個問題。我發現的是這樣的:@rownumber:= if(@rownumber,@rn + 1,@rn + 1)AS id,'修復它? –

+0

[你應該閱讀他們的文檔](https://dev.mysql.com/doc/refman/5.5/en/user-variables.html),並閱讀與評估的順序部分 –