PICA-MEQUE

Home » Archives » April 2004 » 情報処理手段と手クセ

[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を、右結合、とか左結合と称すのは、なんつうか、直感的すぎてかえってイメージしにくいわ。

Replies: 2 コメンツ

abe++ said on Tuesday, April 27th:

こちらの方が酔ってたので超大丈夫です!

その後、「joinは行列の直積なんですよ」という表現をしてもらったら、ちょっとだけイメージが涌きました。DBがせっかく直積する関数を持ってるのに、Hashとループを使うのは直積演算の公式を展開しているような行為で、なんつうか、出力は一緒でも生産性が最適でないなあ、などと反省した次第です。

でも使いこなせないんですけどね(笑)

tarox a.k.a taro yoshioka said on Sunday, April 25th:

先日はどもでした。 smile軽く酔っていたので失礼なかったかなーと思いつつ。 razz
SQLですがおいらもクエリにこだわる人ではないので、いくつかのクエリを発行して、なんでもありのObject型のクラスに突っ込んで連想配列でどうこうやると言った感じに走りがちです。
はじめはjoinでうまくつなごうと努力するのですが、エラーが続出してそのうちめんどくさくなってしまうという口です。右結合、左結合考えたくないっすねー
そんなときやっぱSEやめてよかったのかなー、と思う瞬間だったりします。 wink

R E A D M E Q U E
Me, Myself, and I
Archives
ちと前までのlog
スロ日記
俺だけ便利俺アンテナ
Daibukkon:ネタクリップ
大甲子園

April 2004
SMTWTFS
    123
45678910
11121314151617
18192021222324
252627282930 

Valid XHTML 1.0!
↑うそ、守れてない


Powered By Greymatter