Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-选择一对多关系中具有特定匹配的记录_Mysql_Sql - Fatal编程技术网

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

MySQL-选择一对多关系中具有特定匹配的记录,mysql,sql,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 ------------

我在获取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、exists和NOT exists以及可能的联接操作,但都没有成功。

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

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

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

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

如果它只有两个B类或两个C类,这会拉一张唱片,不是吗?不,我也试过这种方法。product1将包含在结果中,因为当mysql基于此条件选择时,即使product1也会有计数2。@SenthilRaj,我在我的服务器上尝试了它,它给出了您所期望的结果results@xception:请把这个给我。添加product5并将其与类别A和C进行映射。现在请尝试您的查询,结果将为product5。@SenthilRaj感谢您的澄清,将删除我的回答如果它只有两个B类别或两个C类别,这将拉出一条记录,不是吗?不,我也尝试过这种方法。product1将包含在结果中,因为当mysql基于此条件选择时,即使product1也会有计数2。@SenthilRaj,我在我的服务器上尝试了它,它给出了您所期望的结果results@xception:请把这个给我。添加product5并将其映射到类别A和C。现在尝试您的查询,结果将显示product5。@Senthillaj感谢您的澄清,将删除我的回答这不会给出所需的结果,因为它还将返回产品ID 1和4。它返回7行而不是预期的4。这不会给出所需的结果,因为它还将返回产品ID 1和4。它返回7行而不是预期的4