ここで非常に単純なものを見逃していないことを願っています。Googleで検索し、StackOverflowで検索しました。
状況は次のとおりです。簡単にするために、SQL Server 2008 DBに「PeoplesDocs」というテーブルがあり、多数のユーザーとそのユーザーが所有するすべてのドキュメントを保持しているとします。したがって、1人の人が複数のドキュメントを持つことができます。また、「RequiredDocs」というテーブルがあり、人が持つべきすべてのドキュメントを保持しているだけです。これがそのようなものです:
PeoplesDocs:
PersonID DocID
-------- -----
1 A
1 B
1 C
1 D
2 C
2 D
3 A
3 B
3 C
RequiredDocs:
DocID DocName
----- ---------
A DocumentA
B DocumentB
C DocumentC
D DocumentD
次のバリエーションを返すSQLクエリを作成するにはどうすればよいですか。
PersonID MissingDocs
-------- -----------
2 DocumentA
2 DocumentB
3 DocumentD
私は試しましたが、ほとんどの検索で次のようなものが指摘されています。
SELECT DocID
FROM DocsRequired
WHERE NOT EXIST IN (
SELECT DocID FROM PeoplesDocs)
ただし、この例では、全員が少なくとも1つのドキュメントを持っているため、明らかにこれは何も返しません。
また、人がドキュメントを持っていない場合、DocIDがNULLに設定されたPeoplesDocsテーブルに1つのレコードがあります。