我的数据库如下所示,我有分配给特定配置文件的客户帐户,并且我有分配给特定类别的配置文件,如下架构所示:
| categories | | profiles | | categories_map |
--------------- ------------- ----------------------------
| ID | name | | ID | name | | ID | profile_id | cat_id |
--------------- ------------- ----------------------------
| 1 | cat1 | | 1 | p1 | | 1 | 1 | 1 |
| 2 | cat2 | | 2 | p2 | | 2 | 2 | 1 |
| 3 | cat3 | | 3 | p3 | | 3 | 3 | 1 |
| 4 | p4 | | 4 | 1 | 2 |
| 5 | 3 | 2 |
| 6 | 4 | 3 |
| profiles_map |
-----------------------------
| ID | profile_id | acc_id |
-----------------------------
| 1 | 1 | 1 |
| 2 | 3 | 1 |
| 3 | 4 | 1 |
我需要获取分配给帐户的类别 - 这意味着当我想要获取 acc_id = 1 的类别时,我应该获取 ID 为 2 和 3 的类别( ID 为 2 的类别不适合,因为它包含 ID 为 2 的个人资料未分配给此帐户)。我尝试了这个查询,但它不起作用
select cats.id from profiles_map map
right join categories_map catm on catm.profile_id = map.profile_id
right join categories cats on cats.id = catm.cat_id
where catm.profile_id in (select profile_id from profiles_map where acc_id = 1)
and map.acc_id = 1 group by cats.id;
谁能帮我解答这个问题吗?
最佳答案
你能试试这个吗?
SELECT DISTINCT C.ID
FROM profiles_map PM
INNER JOIN categories_map CM ON CM.profile_id = PM.profile_id
INNER JOIN categories C ON C.ID = CM.cat_id
WHERE PM.acc_id= 1
关于mysql - 从多对多关系中获取特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38051827/