あなたの質問は、「1つの特定の都市のすべてのプロジェクトに出荷された/出荷されたすべてのコンポーネントを見つける」です。これを「特定の都市にコンポーネントがないプロジェクトがないすべてのコンポーネントを検索する」と言い換えています。
私はこれに直接答えたいと思います:
select scp.component
from scp join
projects p
on scp.pnr = p.pnr
where p.city = 'Foobar Town'
group scp.component
having count(distinct scp.pnr) = (select count(distinct pnr)
from projects
where city = 'Foobar Town'
);
これにより、市内の個別のプロジェクトの数がカウントされ、市内のプロジェクトの数と比較されます(distinct
サブクエリではおそらくidは必要ありません。
まず、これがもっと簡単かどうかはわかりません。第二に、私はNOT EXISTS
を認めた最初の人です メソッドmay NOT EXISTS
のネストはより効率的ですが、 サブクエリでは、パフォーマンスに悪影響を与える可能性があります。ただし、これはわかりやすいと思います。