7216 | 連結コマンドの落とし穴 | はくぶん | 2016-09-25 13:58:46 |
ここ数日出続けていた“Max values are different”のアラートが、ようやく消えた。 もちろん修復したからである。 アラートに気付いて、すぐ修復しようとしたのだが、上手く行かない。 その原因を探っていたら、結局数日掛かってしまった。 その際に気付いたことを、備忘録として書き残しておく。 SQLコマンドに“UNION”というものがある。 カラム構成の同じ複数のテーブルのデータを連結させる時に使う。 連結用コマンドは“UNION”と“UNION ALL”の二つ。 “UNION ALL”は、複数のテーブルのデータを、無条件で全て連結する。 一方“UNION”の方は、同一データの重複を除外しながら連結する。 今回の修復が最初上手く行かなかったのは、ここに俺の認識不足があったからだ。 “UNION”は重複を取り除いてくれるが、それはテーブル間だけでなく、同一テーブル内の重複も取り除いてしまう。 したがって、同一テーブル内に重複データが多数あった場合、“UNION”で複数テーブルのデータを連結すると、連結されたデータ数が、元の単一テーブル内のデータ数より少なくなってしまうことがある。 それが今回起きた現象なのである。 本来の目的は、メインテーブル内にどれだけ重複データがあっても、それらはそのままで、連結するテーブルから重複のないようにデータを追加していく、というものだった。 それを“UNION”を使ってやろうとしたら、思わぬ落とし穴にはまってしまったということである。 メインテーブルからも、連結テーブルからも、該当データを全て取り出し、連結テーブルからのデータは、メインテーブル内のデータと重複しないようチェックしながら追加していく。 そういう風にプロセスを分けないと、意図した結果は得られないことが分かった。 そして、最終的に、その方法でアラートは消えた。 |
|||
メッセージ文字数:775/796 | |||