MySQLストアドプロシージャでIN()を使って特定のレコードのみを取得する方法
MySQLのストアドプロシージャ内でIN()を使用すると、条件に一致する特定のレコードだけを柔軟に取得できます。ここでは、実際の手順をサンプルコードとともに解説します。
1. サンプルテーブルの作成
まず、テーブルを作成します。
mysql> create table DemoTable2004
(
UserId varchar(20),
UserName varchar(20)
);
Query OK, 0 rows affected (0.57 sec)2. レコードの挿入
次に、INSERTコマンドを使ってテーブルにレコードを挿入します。
mysql> insert into DemoTable2004 values('John_123','John');
Query OK, 1 row affected (0.93 sec)
mysql> insert into DemoTable2004 values('23456_Carol','Carol');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable2004 values('111_Bob','Bob');
Query OK, 1 row affected (0.14 sec)3. テーブル内の全レコードを確認
SELECT文でテーブルの全レコードを表示してみましょう。
mysql> select * from DemoTable2004;
以下のような出力が得られます。
+-------------+----------+ | UserId | UserName | +-------------+----------+ | John_123 | John | | 23456_Carol | Carol | | 111_Bob | Bob | +-------------+----------+ 3 rows in set (0.00 sec)
4. IN()を使ったストアドプロシージャの作成
続いて、引数として受け取ったUserIdをIN()で絞り込み、該当するレコードのみを取得するストアドプロシージャを作成します。ストアドプロシージャを定義する際は、あらかじめdelimiterを変更しておくのがポイントです。
mysql> delimiter //
mysql> create procedure test_of_in(IN uId varchar(20))
BEGIN
select * from DemoTable2004 where UserId IN(uId);
END
//
Query OK, 0 rows affected (0.15 sec)
mysql> delimiter ;5. ストアドプロシージャの呼び出し
作成したストアドプロシージャをCALL文で呼び出し、特定のレコードを取得します。
mysql> call test_of_in('23456_Carol');実行結果は以下のとおりです。指定した「23456_Carol」のレコードだけが取得できていることがわかります。
+-------------+----------+ | UserId | UserName | +-------------+----------+ | 23456_Carol | Carol | +-------------+----------+ 1 row in set (0.00 sec) Query OK, 0 rows affected, 1 warning (0.02 sec)
まとめ
このように、ストアドプロシージャの引数をIN()句に渡すことで、呼び出し時に任意の値を指定して特定のレコードのみを取得できます。複数の値を扱いたい場合には、FIND_IN_SET()や動的SQLを組み合わせる方法も検討するとよいでしょう。
-
【MySQL】ストアドプロシージャでパラメータを受け取り、動的SQLのLIKE句を使って新しいテーブルを作成する方法
はじめにMySQLでは、ストアドプロシージャ内でパラメータを受け取り、その値を動的に組み立てたSQLのLIKE句に反映させて、新しいテーブルを作成することができます。このような処理にはプリペアドステートメント(PREPARE / EXECUTE)を使用します。本記事では、サンプルテーブルの作成からストアドプロシージャの定義、実行結果の確認まで、手順を追って解説します。1. サンプルテーブルの作成まず、元となるテーブル「DemoTable1973」を作成します。mysql> create table DemoTable1973 (  
-
MySQLストアドプロシージャでDELIMITER(区切り文字)を正しく使って値を挿入する方法
MySQLでストアドプロシージャを作成する際、DELIMITER(区切り文字)の扱いに戸惑う方は少なくありません。デフォルトではMySQLクライアントがセミコロン「;」を文の終端として解釈するため、プロシージャ内の複数のSQL文が途中で分割されてしまうことがあります。本記事では、区切り文字を正しく変更しながら、ストアドプロシージャを使ってテーブルへ値を挿入する具体的な手順を解説します。 1. サンプルテーブルを作成する まず、データを挿入するためのテーブルを作成します。ここでは学生の名前と姓を格納するテーブルを用意しました。 mysql> create table DemoTable