[Previous entry: "メモリが足んねえ!"] [Next entry: "ふぉーしゅ!"]
04/22/2004: "情報処理手段と手クセ"
相変わらずEclipse相手でプチウェイトの嵐に辟易してたところ、ちょっとした命題に突き当たった。
「あるDBにおいて、テーブルAに含まれてる項目が、全てとは限らないがテーブルBに別名で入ってて、それぞれ値を持っている。テーブルAの項目全てに対して、テーブルBで持っている値を突き合わせて一枚の表を得るにはどうしますか。」というもの。とても一般的な命題で、DBの教科書なら軒並み解法が書いてありそうなもんだが、DBは激しく門外漢な俺が考えた手段は「Aの名前をHashのキーにして、Aの名前各々に対してクエリ投げて、帰ってきたBに入ってる値を連想配列にブッこんでって、あとでキー全てに対して中身を表示」というもの。Perlばかりいじってそうなヤツが考えそうなことだ。
で、そんなんで実装しようと思ってたら、DBA志願の後輩君、「join して View 作れば一発なんですが」とカタカタとSQLをお書きになる。Access上手な同輩は手段は違えど、アクセスのデザインビューでテーブル間を矢印でビョイっと繋いで同じ結果を得ている。
「はー、なるほど、これがDBアタマか!」と目からウロコの感覚。が、並行して、俺がHashでやろうとしたその解法は、彼らにはてんで予想がつかなかったらしい。同じ情報を目の前にして、アクセス手段=手クセが違うとこうまでプロセスが違うのかと思った次第。
(ちなみにもちろんDBネイティブなところで処理した方がめっさパフォーマンスは出るので一般的には俺のアプローチはダメ)
どうでもいいけど、DBのjoinを、右結合、とか左結合と称すのは、なんつうか、直感的すぎてかえってイメージしにくいわ。