人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:SQL ひとつ データベース ルール レコード
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●60ポイント ベストアンサー

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

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;

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


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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ