Oracle9i のデータベースに次のテーブルがあります。
CREATE TABLE involved_in
(
rid number,
aid number NOT NULL,
fid number NOT NULL,
role varchar(80),
note varchar(80),
job varchar(35),
PRIMARY KEY(rid),
FOREIGN KEY(fid) REFERENCES production(pr_id),
FOREIGN KEY(aid) REFERENCES person(pid)
);
映画 (fid) で働いた俳優 (援助) に関するデータが含まれています。
私がやりたいことは、 ベーコン数を計算することに似ています
私のケビンベーコンを除いて、援助517635を持っていることで知られています.
517635 への接続を見つけるために、特定のアクターを (別の支援によって) 接続する必要があるアクターの数を (SQL ステートメントのみを使用して) 計算する方法についての手がかりがありません。
クエリの結果は、指定されたアクターが私の男に到達するために接続する必要があるすべてのアクターのリスト、または単なる数字のいずれかになります。
そのためには、最初に 517635 が協力したすべてのアクターを取得する必要があると考えました。これらのアクターは、彼と直接協力した結果として 1 になります。テーブルは大きすぎませんが、それを不可能にするのに十分な大きさです。
例として、ブラッド・ピットが私の 517635 であるとしましょう。彼はミスター・アンド・ミセス・スミスでアンジェリーナ・ジョリーと仕事をしたとしましょう。それは彼女をナンバー 1 にするでしょう。ジョリーは彼と一緒だったので、ブラッド・ピットに対するブルース・ウィリスの番号は2になります.
私のクエリでは、指定された番号がアンジェリーナの場合、結果は次のようになります: "ブラッド ピット 1" または単に "1" 指定された番号がウィリスの場合、結果は次のようになります: "アンジェリーナ ジョリー ブラッド ピット 2" または "2" 何の例表にあります:
INSERT INTO involved_in(rid, aid, fid, role, note, job) VALUES(1, 33, 1584953, 'Himself', 'NULL', 'actor');
INSERT INTO involved_in(rid, aid, fid, role, note, job) VALUES(2, 1135, 1999660, 'Himself', 'NULL', 'actor');
INSERT INTO involved_in(rid, aid, fid, role, note, job) VALUES(3, 1135, 2465724, 'Himself', 'NULL', 'actor');
INSERT INTO involved_in(rid, aid, fid, role, note, job) VALUES(4, 6003, 2387806, 'Himself', '(archive footage)', 'actor');
INSERT INTO involved_in(rid, aid, fid, role, note, job) VALUES(5, 13011, 1935123, 'Himself', 'NULL', 'actor');
私は何も考えていません。私はSQLにまったく慣れていないので、ループの数をカウントする変数を使用して無限ループにつながると考えることができます。どこから始めて、運が良ければ終了するかについてのアイデアはありますか?