web-dev-qa-db-ja.com

WHERE句のMySQLユーザー定義変数

この例のように、WHERE句でユーザー定義変数を使用する方法があるかどうかを知りたいです。

SELECT id, location, @id := 10 FROM songs WHERE id = @id

このクエリはエラーなしで実行されますが、期待どおりに機能しません。

17
Paulo Freitas

マイクE.が提案したものからそう遠くはありませんが、1つのステートメント:

SELECT id, location FROM songs, ( SELECT @id := 10 ) AS var WHERE id = @id;

同様のクエリを使用して、MySQLのウィンドウ関数をエミュレートしました。例えば。 行のサンプリング -同じステートメントで変数を使用する例

23
Maxym

ユーザー定義変数 のMySQLマニュアルページから:

原則として、ユーザー変数に値を割り当てたり、同じステートメント内で値を読み取ったりしないでください。期待どおりの結果が得られる場合がありますが、これは保証されていません。

したがって、割り当てをselectステートメントから分離する必要があります。

SET @id = 10;
SELECT id, location, @id FROM songs WHERE id = @id;
11
steampowered

もちろんですが、変数を設定して、あなたと同じステートメントで使用しようとする人を見たことがありません。試してください:

SET @id := 10;
SELECT @id := 10 FROM songs WHERE id = @id;

または

SELECT @id := 10 FROM songs;
SELECT @id := 10 FROM songs WHERE id = @id;

私は両方を使用しました、そしてそれらは両方とも私のために働くようです。

5
Mike E.

これは私のために働いた!

SET @identifier = 7;
SELECT * FROM test where identifier = @identifier;
0
Jonas