ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

SQL to AsakusaFW:join(null同士の結合)

2019-12-15 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2019の15日目、SQLをAsakusaFWに変換するポイントについてです。

SELECT文のFROM句におけるテーブル結合を実現する方法としてCoGroupMasterJoinUpdateExtract(+GroupView)演算子を使う方法を紹介してきました。
これらの方法に共通するSQLの問題点として、(WHERE条件の話でも出した)NULL同士の結合があります。
SQLではNULL同士の結合(「=」による演算)はUNKNOWNなのでFALSE扱い、すなわち結合しないのですが、AsakusaFWではnull==nullはtrueなので結合することになります。

大抵の結合ではマスターテーブルのプライマリキーに対して結合することになる(と思いたい)ので、プライマリキーならNOT NULLなのでこの問題を考える必要は無いのですが。

これを厳密に対処するなら、
CoGroup演算子の場合:渡ってきたデータの結合キー項目がnullかどうかチェックする
MasterJoinUpdate演算子の場合:MasterSelectionで結合キー項目がnullかどうかチェックする
GroupViewの場合:結合キー項目がnullだったらGroupViewから取得しない
のような処理を入れる必要があるでしょう。


個人的には、AsakusaFWの結合方法のオプションとして「null同士だったら一致しないものとして扱うモード」があると上記の問題の対処が楽になるなーと思うのですが、
しかしSQLに似せる為だけにそういうオプションを入れるのは微妙だとも思います^^;


コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« SQL to AsakusaFW:join(Gro... | トップ | SQL to AsakusaFW:集約 »
最新の画像もっと見る

コメントを投稿

PG(分散処理)」カテゴリの最新記事