一般社団法人 全国個人事業主支援協会

COLUMN コラム

こんにちは。
田中です。

今回はPostgreSQLのCTE(Common Table Expression)について書いていこうと思います。

MySQLで見た、1000行超えるSQLに啞然

数年前の案件である。
当時PHPで作成されたシステムをJavaへ刷新する、というプロジェクトに参画していたのだが、当時の設計書がない、当時の担当者もいない(委託だったらしくさもありなん)、仕様はソースを解析するしかないという状況。
別にこの状態自体は珍しくもなんともない。
むしろ、今までまともな設計書が残っていたケースのほうが少ないので驚くところではない。

そこでSQLを開いてみたところ…
―FROM分に()があってSELECT文が続いている、だと…!
FROMに指定されているSELECT文が1つならまぁいい。
問題は、中のSELECT文のFROMにまたSELECT文が続いていることなのだ…!
下手すると4重、5重重なっているうえに、JOINも多いだと…!

なんだこれ、ややこしい!!
そりゃあ、1000行余裕で超えるでしょうよ!

と解析の大変さに震えた。

この場合、何が大変かと言えば、もちろん1つ1つのSELECT文が何を取得しているか、と読み解いていく必要があるからだ。
シンプルに1つのテーブルから取得する内容であれば、解読に時間はかからないが、JOIN系が入ったりするとその文難度は上がる。
結局当時は、SELECT文1つ1つを見ては資料に起こして仕様を確認した。

PostgreSQLのCTEとは

 

The following two tabs change content below.

tanaka_k1968

最新記事 by tanaka_k1968 (全て見る)

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア