ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

なんで最初から思いつけないんだろう?と気分が落ち込む

システムの保守をしている案件で、依頼元からデータの抽出依頼がありました。
欲しいデータは以下の形式でした。

案件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して、データを抽出する。

SQL
Photo by Caspar Camille Rubin on Unsplash

このようなSQLを書くのに、合計3時間ほどかかっています。
当初、確認しながらなので、1時間くらいで作成できるかと思って着手して、どうすればいいんだっけ?と悩み始めて上手くできず、一度諦めるまでに2時間使いました。

帰ってから、もっとシンプルにできる方法がありそうだけど、なぜか難しく考えすぎていたのでは?、こうずればいいんじゃないのか?と思うようになりました。
翌日、新しいSQLを書き始めたら、1時間ほどで完成しました。

最初から正しい方向性でSQLを書き始められたら、1時間ほどで終わっていたはずです。
なんで思いつけないんだろう、と考えてしまうと、気分が落ち込んでしまいます。
抽出するSQLが書けたのだから、いいじゃないか、データ抽出プログラムを作成しなくて済んで、よかったじゃないか、と考えるようにしています。