タイトルのとおり、MySQLのSQLで変数が使えないか検証したときのメモです。
基本的に変数を使おうとすると、PL/SQLの記事に誘導されてしまうことが多かったです。しかし、素のSQLで変数を使用した検索するための記事があるとうれしいため、この記事を残します。
環境
- MySQL
- 5.7
- SQL Fiddleでも動作確認できます
データセットアップ
CREATE TABLE docs( id varchar, created_at timestamp ); INSERT INTO docs values(1, '2020-01-01'); INSERT INTO docs values(2, '2020-02-01'); INSERT INTO docs values(3, '2020-03-01'); INSERT INTO docs values(4, '2020-04-01');
対応
SET @変数名 = 代入
を使用することで変数を定義できます。
SET @id = '1'; SELECT * FROM docs WHERE id = @id;
複数の変数を1度に定義することもできます。
SET @var_name = expr [, @var_name = expr] ...
終わりに
特定のIDに紐づく必要なテーブルを全部検索できるテンプレートのSQLを用意しておいて、そのIDを毎回置換して検索していました。それでも運用はできるのですが、1部だけ別IDを検索したい等で変換すると一括置換ができなくなり、Query ConsoleにゴミSQLが残ってしまっていました。
地味に助かるので、MySQLのプロジェクトに参画するときは使用していきたいと考えています。
この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。
参考情報
- MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.4 ユーザー定義変数
- PostgreSQLでは同じ運用はできなさそう
- Oracleにはありそうだが、検証できる環境を用意できなかった