我有其where子句中使用的變量的查詢:MySQL的迴路爲使用遞增變量執行查詢
SET @id = 1;
SELECT
id,
value
FROM myTable
WHERE id = @id;
我想運行查詢爲@id
值1到100,然後聯盟(或以某種方式將所有循環結果合併)成一個結果集。這可能在MySQL中,如果是這樣,什麼是一個好方法?
我有其where子句中使用的變量的查詢:MySQL的迴路爲使用遞增變量執行查詢
SET @id = 1;
SELECT
id,
value
FROM myTable
WHERE id = @id;
我想運行查詢爲@id
值1到100,然後聯盟(或以某種方式將所有循環結果合併)成一個結果集。這可能在MySQL中,如果是這樣,什麼是一個好方法?
爲什麼會使用這個變量?只需使用一個簡單的where
條款:
select id, value
from myTable
where id between 1 and 100;
相反,如果你真的ID希望第一個100行,然後用order by
和limit
:
select id, value
from myTable
order by id
limit 100;
只需使用一個子查詢來獲取變量。
並把更復雜的查詢的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;
評估順序無法保證,這可能會導致在選擇查詢中使用變量時出現問題。這是明確建議不要做 –
@JohnRuddell我不是100%確定這個問題。我發現的是這樣的:@rownumber:= if(@rownumber,@rn + 1,@rn + 1)AS id,'修復它? –
[你應該閱讀他們的文檔](https://dev.mysql.com/doc/refman/5.5/en/user-variables.html),並閱讀與評估的順序部分 –
查詢被簡化例如本修訂 – bsapaka
作出這樣的是,那麼你發佈一個新問題,那就沒辦法了。複雜=很好 – Drew
@bsapaka。 。 。問另一個更能代表你需要的問題。 –