スパゲッティな複雑なクエリを書くと、意図しない結果を出したり、デバッグも難しくなったりするというもの。
解決策としては分割統治を行うべきだということで以下の解決策を出している
ワンステップずつ
SQLを分割し、ワンステップずつ処理すべき
UNIONをつかう
分割したSQLをUNIONでつないで結果をひとつにする
CASEとSUMをつかう
条件ごとの集約なら一つでできる。
複数のUPDATEを行うときには、検索結果でSQLをつくるようにして、実行する
しかし・・・
複雑なクエリを書きたくなる理由は他にあるのではないだろうか?それは、あるSQLの結果セットを使ってSQLを実行したいというものである。
分割する際の解決策として良くないのは、あるSQLの実行結果をループにして、さらにSQLを何度も実行するというやり方である。これでははじめの結果セット分のSQLが実行されるため、レスポンス的に大きな問題になる。こういう場合はむしろ一つのSQLにまとめ、DBMSにまかせたほうが良い。
また、あまりに複雑な場合は、Martin Fowlerの指摘にあるようにビューを使うのもひとつの方法である。オプティマイザがたまにおかしくなるときがあるが。