なんで最初から思いつけないんだろう?と気分が落ち込む
システムの保守をしている案件で、依頼元からデータの抽出依頼がありました。
欲しいデータは以下の形式でした。
案件ID | 件名 | チェック1担当 | チェック2担当 |
23 | ○○案件 | 山田太郎 | 山田次郎 |
34 | ××案件 | 山本太郎 | 山本次郎 |
システムが保持しているデータの形式は、以下の通りです。
案件テーブル
案件ID | 件名 |
23 | ○○案件 |
34 | ××案件 |
ユニークID | 案件 | 案件ID | チェック種別ID | 担当ID |
50000 | ○○案件 | 23 | 1 | 101 |
50001 | ○○案件 | 23 | 2 | 102 |
50002 | ××案件 | 34 | 1 | 103 |
50003 | ××案件 | 34 | 2 | 104 |
担当ID | 担当 |
101 | 山田太郎 |
102 | 山田次郎 |
103 | 山本太郎 |
104 | 山本次郎 |
SQLでデータを抽出する方法は複数あると思いますが、今回は、以下のように行いました。
1.チェック種別ごとに、案件-担当者関連付けテーブルに担当者テーブルをLEFT OUTER JOINして、以下のデータを抽出する。
案件ID | チェック種別ID | 担当 |
23 | 1 | 山田太郎 |
34 | 1 | 山本太郎 |
案件ID | チェック種別ID | 担当 |
23 | 2 | 山田次郎 |
34 | 2 | 山本次郎 |
2.1.の結果を抽出するSQLをサブクエリとして用いて、案件テーブルにLEFT OUTER JOINして、データを抽出する。
Photo by Caspar Camille Rubin on Unsplash
このようなSQLを書くのに、合計3時間ほどかかっています。
当初、確認しながらなので、1時間くらいで作成できるかと思って着手して、どうすればいいんだっけ?と悩み始めて上手くできず、一度諦めるまでに2時間使いました。
帰ってから、もっとシンプルにできる方法がありそうだけど、なぜか難しく考えすぎていたのでは?、こうずればいいんじゃないのか?と思うようになりました。
翌日、新しいSQLを書き始めたら、1時間ほどで完成しました。
最初から正しい方向性でSQLを書き始められたら、1時間ほどで終わっていたはずです。
なんで思いつけないんだろう、と考えてしまうと、気分が落ち込んでしまいます。
抽出するSQLが書けたのだから、いいじゃないか、データ抽出プログラムを作成しなくて済んで、よかったじゃないか、と考えるようにしています。