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

时间:2012-09-19 16:03:17

标签: mysql sql

我在获取1对多关系中的记录时遇到问题。以下是方案,

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,则只显示product4。

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

2 个答案:

答案 0 :(得分:5)

您需要计算记录实例的数量,该数量等于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

答案 1 :(得分:-1)

SELECT * FROM products p
INNER JOIN product_categories pc ON p.id = pc.pid
INNER JOIN Categories c ON pc.cid = c.id
WHERE c.name IN('B', 'C');
相关问题