SQL の中で変数を使う(MySQL)

union とかしたりする時、where 句に指定する箇所が増える→プレースホルダの数が増える、で気持ち悪いのをなんとかしたい。
で、MS SQL Server をいじってたときは DECLARE した変数に SET してそれを使ってたりしてたので、同じことできないかなーと思って調べたら出来たのでメモ。

SELECT 
	hoge.id, fuga.name
FROM (
	SELECT id FROM foo WHERE col1 = @a:=1 AND col2 = @b:=1
	UNION
	SELECT id FROM bar WHERE col1 = @a AND col2 = @b
	) hoge
LEFT OUTER JOIN fuga ON fuga.hoge_id = hoge.id
ORDER BY hoge.id

実際の SQL ではなくて、名前変えたりはしょったりしてるので間違ってるところがあるかもしれないけど、変数はこんな感じで使えた。