最終更新日:2018‐11-22
コードを書いてて、たまに「あれ?どうやるんだっけ」となるコードの備忘録です。
ListからIN句で使えるSQLを生成する
IN文句に対してプレースホルダが使えるようなORMを使っている場合はいいのですが、たいていの場合、うまく動いたためしがないので、文字列結合してくっつけます。Linqのメソッド構文でサクッと書けます。
// IN句で使えるようにシングルクォーテーション+カンマつなぎにする
var condition = string.Join(",", piyoIdList.Select(x => string.Format("'{0}'", x)));
// SQLを実行(テンプレートリテラルで条件値を設定)
var sql = $"SELECT * FROM T_HOGE WHERE piyoId IN ({condition});";
ただし、仕様上、IN句内のデータが大量になることが想定される場合はパフォーマンスの観点からお勧めできません。使用するDBによってはIN句内の設定値件数オーバーでエラーとなります。そのような場合は、素直にtempテーブルを作ってINNER JOINするか、Listを分割して複数回クエリを発行し、後でフェッチした値をAddRangeするなどの方法が考えられますが、前者の方がパフォーマンスが良いと思われます。
技術の進化についていけていないシステムエンジニア。浅く広く、何でも大体はこなせるエンジニアで重宝されてる(つもり)。でもやっぱり特化した武器欲しい。
備忘録として記事を投稿していますが、少しでも誰かの助けになればと思います。
最近はプロジェクトでReact(TypeScript )を触っています。
趣味でギター弾きます。