MySQL - 选择一对多关系中具有特定匹配的记录

标签 mysql sql

我在获取一对多关系中的记录时遇到问题。以下是场景,

table products
---------------------
id | name
---------------------
1 | product1
2 | product2
3 | product3
4 | product4


Categories
-------------
id | name
-------------
1 | A
2 | B
3 | C


product_categories
-------------------
pid | cid
-------------------
1 | 1
1 | 2
1 | 3
2 | 2
2 | 3
3 | 2
3 | 3
4 | 3

我想根据类别名称选择产品。

如果我的条件是类别 B 和 C,那么预期输出将是,

预期结果:

----------------------------
Product_name |  category_name
----------------------------
Product2 | B
Product2 | c
Product3 | B
Product3 | c

如果我的类别是 C,则只应显示产品4。

请帮助我。我已经尝试了很多方法和技术,例如 IN、NOT IN、存在和不存在以及可能的连接操作,但没有任何效果。

最佳答案

您需要计算记录实例的数量,该数量等于您在 IN 子句中提供的参数数量。

SELECT  a.Name
FROM    products a
        INNER JOIN product_categories b
            on a.id = b.pid
        INNER JOIN Categories c
            on b.cid = c.id
WHERE   c.name IN ('B','C')
GROUP BY a.NAME
HAVING COUNT(*) = 2

关于MySQL - 选择一对多关系中具有特定匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12498584/

相关文章:

php - Mysql显示所有记录

php 登录仪表板在 Chrome 中显示数据泄露警报

php - 准备好的语句,循环结果以获得更多结果

mysql - SQL 查询聚合值不起作用?

SQL Insert 大数据集

php - 从数据库中提取日期并仅选择今天的记录

javascript - 如何在 JavaScript 中从 MySQL 数据库中获取数据以构建图表?

mysql - 上传海量数据到MySQL服务器

sql - 游标和 View 有什么区别?

mysql - 无法选择 uuid = (number) 的行