DFU, Query, SQL

59. ゆるやかなファイル結合

先に紹介したふたつの2つのファイル結合:

SELECT T01.*, T02.* FROM QTRFIL/SHOHIN T01, QTRFIL/HINSHU T02 WHERE T01.SHSCOD = T02.HNSCOD

とは商品マスター(SHOHIN T01)の品種コード(T01.SHSCOD)と
品種マスター(HINSHU T02)の品種コード(T02.HNSCOD) が一致するものだけが
レコードとして抽出される。
逆に言えば一致しないレコードは抽出されない。
つまりある商品マスター(SHOHIN T01)の品種コード 1105 があって
それが品種マスターに登録されていなければこの商品マスター・レコードは
抽出されないことになる。
すなわちレコードが脱落する。

IBM iで業務アプリを開発する場合、理想的な組み合わせだけとは限らない。
例えば社員の退職があって社員レコードを削除したが
給与支払い明細表に脱落があってはならない。
結合できなかったレコードも脱落させないように配慮しなければならない。

このように実務では理想的な結合ではなく結合できなかった場合でも
脱落はさせない「ゆるやかな結合」が必要となってくる。

SQLにはこのような脱落させないゆるやかな結合もサポートされていて
それには

LEFT JOIN ~ ON を使って結合する。

この LEFT JOIN ~ ON によるゆるやかな結合はあまり知られていないが
IBM i の実務的な開発をするのであれば ODBCドライバーーの
記述でも考慮することが必要である。

[例]


 SELECT T01.*, T02.* FROM QTRFIL/SHOHIN T01 LEFT JOIN QTRFIL/HINSHU T02
 ON T01.SHSCOD = T02.HNSCOD