データベースの検索方法

テーブルの項目A,B,C,Dに関して、レコード1と「似た」レコードを検索しようとします。
そのルールとして、A,B,C,Dの値が同じ数が多ければ多いほど「似ている」とするとします。

なお、A,B,C,Dに入るのは、別のテーブルのIDで、前から順に登録されているため、あるレコードのA項目と、別のレコードのC項目が同じような場合も値が同じとみなします。

これを実現するSQLはどのようになりますか?

もしくは、このような使い方であれば、A,B,C,Dと項目を分けずに、ひとつの項目に配列型でidを保持したほうがいいのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:2006/11/13 21:19:36
  • 終了:2006/11/13 23:18:53

ベストアンサー

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402006/11/13 23:04:35

ポイント60pt

ちょっと前提条件が分からなかったんですが、

A,B,C,D の各カラムはそれぞれ別のテーブル(仮にテーブル2とする)の主キーをさしていると考えていいんでしょうか?

そして レコード1のAに入っている値はレコード2のA,B,C,D どれとも一致する可能性がある。


以上の前提条件であれば自分なら別のテーブル設計にします。

CREATE TABLE テーブル1 ( pid integer primary key , record_id integer , ref_id integer );

のような感じにしてしまい今までのレコードを4レコードに分割します。

この場合だと、

SELECT record_id FROM テーブル1
  WHERE ref_id IN ( SELECT ref_id FROM テーブル1 WHERE record_id = 1 )
  GROUP BY record_id
  ORDER BY count(*),record_id;

という形で素直に表現できると思うんですが。


前提条件が間違っているようでしたら的外れかもしれません。

id:dingding

なるべくひとつのテーブルでしたほうがいいかと思い、設計していましたが、確かにこの部分だけは別テーブルにしたほうがスマートですね。

SQLもスマートでとても参考になります。

ありがとうございました。

2006/11/13 23:18:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません