質問: 'hanako'; END ``` 最終的に得たい結果は以下です。 | id | | --- | | 432 | ※ 432はyamadaかhanakoのID よろしくお願いいたしますm(_ _)m --- 追記ですが、iwamoto_takaakiさんのおかげで設計方針として条件分岐をデータベースにやらせるのは良くないということを教えていただきました。 ありがとうございます。 そこで、質問を若干修正させて頂きたいのですが、そのような設計がよくないとした上で、ストアドプロシージャを利用しなかった場合に条件分岐させて複数のステートメントを処理させるクエリを発行することはできるのでしょうか? なぜ設計がよくないのに知りたいのかと言いますと「使わないから知らない」よりも「知った上で使わない」ことの方が良かったと思ったからです。 この質問に回答できる方がいらっしゃいましたら是非教えていただけるとありがたいです。
回答: > > よくあるプログラミング言語のように条件分岐させて、それぞれ自由な処理を行いたいと思っています。 > > > よくあるプログラミング言語を使って条件分岐をする方が良いと思います。 あまり多くはありませんが、ストアド・プロシージャや条件文をSQLに含ませたりする方法は、あまり良い効果があったことが無いのです。その理由を述べます。 一つ目は、SQLで使われる条件式はおまけ的なもので、SQLを複雑にさせるからです。大きく複雑なSQLが扱いづらい点はおそらくご存知だろうと思います。 二つ目は、SQLは検索において複雑なことをするのは問題が少ないのですが、結局それを更新系の処理の元データに使うと、ロジックをSQLに容れることになります。そうすると、ロジックを確認するのにプログラムだけではなくSQLやストアドを調査する必要があります。SQLは意図が読みづらく、プログラムに比べてストアドは表現力低いので読みづらいです。 三つ目は、簡易なプログラムを組むのはストアドとくらべて難しいことは特にないということです。特にORマッピングが出来ていれば、それは顕著になります。 問題は複数回SQLの発行が行われることですが、それで遅くなるのは稀です。遅くなった時まで、そのままにしておくことが大事です。複雑な構成に対応するために、更に複雑な構成になり、調査不能になり、継ぎ接ぎの変更しか許されなくなったプログラムを多く見てきました。