我希望我不会在这里遗漏一些非常简单的东西。我已经进行了 Google 搜索并通过 Stack Overflow 进行了搜索。
情况如下: 为简单起见,假设我在 SQL Server 2008 数据库中有一个名为“PeoplesDocs”的表,其中包含一群人和他们拥有的所有文档。所以一个人可以有几个文件。我还有一个名为“RequiredDocs”的表,它简单地保存了一个人应该拥有的所有文档。这是它的样子:
人民文件:
PersonID DocID
-------- -----
1 A
1 B
1 C
1 D
2 C
2 D
3 A
3 B
3 C
所需文件:
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)
但显然这在本例中不会返回任何内容,因为每个人都至少拥有一份文件。
此外,如果一个人没有任何文档,那么 PeoplesDocs 表中将有一条记录,其 DocID 设置为 NULL。