SQL,只检索其多对多关系的所有ID都在一个数组中的条目

SQL, retrieving only entries that all the IDs of its many-to-many relation are in an array

SQL 查询需要一些帮助。下面我写了一个我想要的例子:

我需要检索用户有权查看其所有组件的条目。

权限存储在一个数组中,例如我是一个拥有以下权限的用户:[1,2,3]

在数据库中,我有一个包含以下条目的 table:

entry_id entry_name other_info
1 “示例 A” ...
2 “示例 B” ...
3 “示例 C” ...

而且我和组件是多对多的关系,也就是说每个条目使用了哪些组件:

entry_id component_id
1 1
1 2
1 3
1 4
2 1
2 3
3 2

我只想为我的用户检索条目 2 和 3,因为我可以访问它的所有组件。不会检索条目 1,因为我的权限数组中没有组件 4。

所需输出示例:

entry_id entry_name
2 “示例 B”
3 “示例 C”

首先,对所有 entry_id 中包含您的用户没有权限的记录的查询进行查询。然后在查询的 where 子句中使用它。

--here is a list of entry_id's where components exist that your user 
--does not have permission to
SELECT DISTINCT entry_id FROM tbl2 WHERE component_id NOT IN (1,2,3)


SELECT entry_id, entry_name
FROM tbl1
WHERE entry_id NOT IN (  SELECT DISTINCT entry_id FROM tbl2 WHERE 
component_id NOT IN (1,2,3)   )

如果 component_id 可以为 NULL,您需要检查一下。