mysql - 从多对多关系中获取特定值

标签 mysql

我的数据库如下所示,我有分配给特定配置文件的客户帐户,并且我有分配给特定类别的配置文件,如下架构所示:

| 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/

相关文章:

mysql - 重置 MySQL 管理员密码? (其他解决方案似乎不起作用)

php - 带有 HAVING 语句的 MySQL FOUND_ROWS

mysql - 如何检查是否有多个列为空或 NULL

php - 如何编写一个 SQL 查询来计算每月和每年的行数?

Java 如何向下载的 CSV 添加新的空列

c# - 如何创建一段 C#.NET 脚本让 MySql 服务器执行 MySql 脚本?

php - 优化 sql select 嵌套 where 查询

php - 免费 MySQL 结果并在抛出异常时关闭连接

MYSQL 在一列上选择两个值

mysql - 捕获字符串中的数字