前提
MySQLでストアドプロシージャを書いています。
「種別ID」をカラムに含むテーブルから、特定の種別IDに一致するレコード群をSelectするプロシージャです。
今現在のプロシージャは種別IDを1つだけ引数としてもらい、当該種別IDに一致するレコードをSelectします。
(引数がnullの場合は、全レコードをselectします。)
実現したいこと
今現在は種別ID1つのみを引数としてもらうプロシージャとなっていますが、
複数個の種別IDに一致するレコード群をSelectできるように改造したいです。
●例
・今
引数として種別ID「2」をもらう⇒「種別ID=2」であるレコードがSELECTされる
・改造後
引数として種別ID「2,3,4」をもらう⇒「種別ID=2 or 3 or 4」であるレコードがSELECTされる
該当のソースコード
今現在のプロシージャ
MySQL
1DELIMITER $$ 2CREATE PROCEDURE `hoge_procedure`( 3 IN param_hoge_type_id INT #検索対象種別ID 4 ) 5#以降にストアドプロシージャの処理を記述する 6BEGIN 7#出力対象の列を指定する 8 SELECT 9 hoge_id #ID抽出 10 11 #データ取得元のテーブルを指定する 12 FROM 13 hoge_table 14 15 WHERE 16 hoge_type_id = IFNULL(param_hoge_type_id, hoge_type_id) #nullがきたら全部を検索するようにする 17 ; 18 19#ストアドプロシージャの処理を終える 20END $$ 21delimiter ;
自分なりの方針
以下の方針でやり方がないか、探しています。
①引数の型を文字列型に変える(引数として「2,3,4」という文字列が与えられる想定)
②Whereの中に条件としてIN()を使い、IN()の中身を引数に応じて設定する
やりたいが都合上できないこと
hoge_tableのhoge_type_id カラムに含まれる値を1,2,3,4,5…の整数ではなく1,2,4,8,16…(2のべき乗)とし、Where条件としてビット演算をすればかんたんに実現できそうですが、カラム自体に格納されている値を変化させるのはシステム他部位への影響が甚大であるため、出来れば行いたくないです。
補足情報(FW/ツールのバージョンなど)
MySQL 5.7.33
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/25 04:18