ブログBlog
sql! sql! sql!
投稿日:2025年12月15日 テクノロジー トピックス ビジネス
どうもサカタです。最近すごく寒くなりましたね。
現在、私の常駐先への通勤は歩くところが多いので、いつも着込んで歩いています。(時に走ったり) 父の形見のバーバリのコートを着てNorthFaceのニット帽をかぶって通勤しています。
本日はその常駐先での仕事のお話です。
さて、今回は自治体がお客様です。
税金、収納、滞納等を管理するDBシステムなのですが、開発ではありません。
自治体様はパッケージソフトを導入されて、そのカスタマイズやメンテナンス等が主な仕事です。
ほとんどSQLの作成となります。
御多分に洩れず仕様書等はあまりありません。
またパッケージ部分は開発元からあまり情報公開されないので、ブラックボックスなところも多いです。
サンプルのSQLを見たのですが、基本的に多くのDBのテーブルの中から参照必要な個所のあるテーブルをとにかく 連結、連結、連結と連結を繰り返し、その中から表示必要な項目を選び、一覧表を作成し、CSVで出力します。
パッケージなのでお客様はSQLは見ずにわかりやすいUI画面から簡単も必要な一覧を選ぶことができます。
連結のSQLはほとんどLEFT JOINですが、本やネット調べると左のテーブルは全く変えずON句で指定するカラムの レコードが同じものをキーにテーブルを右側に連結していくのですが、右テーブルに同じ重複する値のレコードが あったら場合は、左側のテーブルは全く同じレコードのコピーを作って連結していきます。
なので何も考えずに連結を繰り返すとレコード数がどんどん膨れ上がって、処理時間がかかるようになったり、 CSVが大きくなりすぎてエクセルで読み込めなくなってしまったりします。
今回はキーとなるレコードのカラムを一意のユニークなものしなければならないとの事で、連結する際に重複レコードが 出ないように作っていく必要がありました。
やり方としてはそのままテーブル丸ごと連結せず、サブクエリにしてWHERE等やでもON句の 等で条件で絞り込んで連結します。
ただ、今回完成に近づいてきた頃、不明な重複レコードが出るようになってしまいました。
ON句の条件をANDでつないで増やしていったのですが、実はそれがダメでした。
サブクエリのWHEREで連結するレコードそのものを絞り込むのは良かったのですが、ON句の条件を増やすと連結されるカラムが増えてしまうようでした。
ON句ではなるべくキーとなるカラムのみを指定してシンプルなものにすると不明な重複レコードは少なくなっていきました。
他にも、そもそもキーとなるカラム値に対して時間、年度等複数のレコードがある場合は集計して1つにしたり、 住所等集計できないものは最新の値にのみにしたり、絞り込む方法も検討する必要がありました。
また、SQLはサーバーの種類によっても方言のような違いがあるので、なかなか大変でした。
サーバールームのような場所での作業でしたので外部ネットへのアクセスが出来ず、スマホも持ち込み禁止なので、 各種SQLに対応したハンドブックのような本を購入して持ち込んで作業しています。これはとても役に立ちました。
最近はこんな感じ日々仕事に取り組んでいます。
それではまたお目にかかりましょう。
