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,您需要检查一下。
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,您需要检查一下。