私はAmazon Redshiftを使用しており、クエリを正しく取得できません。それぞれに1つ以上のスキルが必要な多くのプロジェクトがあるとします。だからプロジェクトとスキルの間に多対多の関係があります。ユーザーはプロジェクトを作成するので、プロジェクトごとに1人の作成者がいます。存在多対多関係
プロジェクトごとに、少なくとも1つのスキルを共有する同じクリエーターが他のプロジェクトをすべて取得したいと考えています。だから私はこのような何かを書きたいのですが:
SELECT p1.project_id, p2.project_id
FROM projects p1
JOIN projects p2 on p1.creator = p2.creator
WHERE EXISTS (SELECT 0
from skills sk1, skills sk2
where sk1.project_id = p1.project_id
and sk2.project_id = p2.project_id
and sk1.skill = sk2.skill)
問題は、これが(disk full
エラーになります)実際にあるということです。
以下の作品が、また、本当に遅いですが(時間半ほどかかります):
この1とSELECT distinct p1.project_id, p2.project_id
FROM projects p1
JOIN projects p2 on p1.creator = p2.creator
join skills sk1 on sk1.project_id = p1.project_id
join skills sk2 on sk2.project_id = p2.project_id
WHERE sk1.skill = sk2.skill
問題は、私は2番目のプロジェクトにいくつかのプロパティを集約したい場合は、私が持っているということですサブクエリとして使用します。
これを行うより良い方法はありますか?私は最初のクエリがより速くなると思っていました。なぜなら、単一のプロジェクトを選ぶことが止まってからです。
あなたが結合列上の任意のインデックスのセットアップを持っていますか? –