こんにちはパグたんです。よろしくお願いします。
解決できる内容(対象者)
・同一テーブルから特定の2レコードを抽出・結合
使用場面:データ移行時などの1対1対応のレコードの両方のデータを横持ちに結合したいとき
SQL文 [INNER JOIN]
SELECT * FROM
[テーブル名X] A
INNER JOIN
[テーブル名X] B
where B.[項目名] = [999999]
AND A.[項目名] = [888888]
考え方 ~パグたん流~
テーブル名Xというテーブルを
・Aテーブル
・Bテーブル
と2つのテーブルと仮想的に異なるテーブルと定義し、
それぞれのテーブルより異なるデータをwhere句で取得する。
実際には1つのテーブルを2つのテーブルと見立てることにより
INNER JOIN
の構文を用いることができます。
INNER JOINとは
INNER JOINを用いることで、
2つのテーブルで重複している箇所(ANDの箇所)
を1レコードとして結合し抽出することができます。
パグたんの経験談
あるプロジェクトで、データ移行・その作業の検証をする必要がありました。
チームメイトが泣きついてきて、パグたんが対処することになりました。
※上司がUNIONを使え使え!!行ってくる中、UNIONでの結合がうまくいかなかったため、この構文を編み出しましたが、、、かっこよく言ったものの実際結構時間かかってしまいました泣
DB(テーブル)のデータ移行の内容は、以下となり、データ加工をしてデータ統合前データを削除し、
データ統合後データのみにするという作業を実施しました。
データ移行前DBには以下2レコードが存在している。
データ移行前データ:1番目と3番目の項目
データ移行後データ:2番目と4番目と5番目の項目
※実際には判定やデータ加工をする。
データ移行前のDBに対して、
「データ移行前」と「データ移行後」データの情報を取得したい。
メリット
既存のINNER JOINという技術を活用するだけで、
同一テーブルから抽出条件が異なる2レコードを1レコードに結合できる。
気を付けないとならないこと
抽出条件により抽出できる
データ(selectデータ)がいずれも2レコード以上の時に
全てのデータパターン(Aテーブルから抽出されるものとBテーブルから抽出されるもの)
が抽出されてしまい、データ量が膨大になる。
※もしかしたらさらに条件を設定すれば必要なデータ量での抽出ができるかもしれません。
まとめ
仮想的にテーブル名を指定するという発想がなかなか思いつかず苦労しましたが、
言われてみれば既存技術を用いて簡単にSQLを使う事ができました。
このように日常から技術力を上げていけば、様々な発想を着想できると考えています。
Sierとして仕事するときに、チームワークやチーム管理を主体業務としていましたが、
実際にパグたん自身も開発する必要があり、技術力が必要となった時に少し時間が
かかってしまいました。
SEとして技術力を向上させることの重要性を学びました。
皆様もこのSQLのみならず、技術力を高め、チームメイトの困りごとを
解決できるような仕事ができる一助となればうれしいです。
ともに学んでいきましょう。よろしくお願いいたします。
コメント