userid_tbl、need_tbl、have_tbl の 3 つのテーブルを持つデータベースがあります。
create table userid_tbl
(user_id varchar2(15) not null primary key);
create table need_tbl
(user_id varchar2(15) not null,
have_item varchar2(100) not null,
foreign key (user_id) references userid_tbl (user_id)
);
create table have_tbl
(user_id varchar2(15) not null,
have_item varchar2(100) not null,
foreign key (user_id) references userid_tbl (user_id)
);
各ユーザーは、データベース内の他のユーザーに提供できるニーズやサービスのレコードを無制限に作成できます。アイテムは、あらかじめ決められたリストからのものです。
need テーブルと have テーブルで結合を行った後、ニーズとウォンツを一致させ、次のようなビューでどのユーザーも満たすことができない要求を破棄しました。
Item: Need: Have:
1 Bob George
2 George Herbie
3 Herbie Bob
4 Larry Wally
5 Wally Larry
6 John George
現在、要求されたニーズが満たされている各ユーザーの順列の数を計算できるクエリを作成しようとしています。たとえば、上記の例では、ボブ、ジョージ、およびハービーは、ラリーとウォーリーと同様に、お互いのニーズを一緒に満たすことができますが、ジョンはできないため、合計数は 2 になります。
私は最初に LOOP を使ってこれを始めましたが、単一のクエリでこれを行うには、よりシンプルでリソースの消費量が少ない方法が必要です。