Sql 使用多个参数选择属于关系数据库的行

Sql 使用多个参数选择属于关系数据库的行,sql,join,Sql,Join,我试图从一个sql查询中获取结果,该查询将显示属于多个类别的所有产品 关系表如下所示 category_id product_id 23 72 33 72 43 72 23 32 33 18 例如,我想做的是选择属于类别23,33,43的所有产品id。在这种情况下只有72个。注意,我试图捕获属于所有ID的产品,而不是或。所以这个qry

我试图从一个sql查询中获取结果,该查询将显示属于多个类别的所有产品

关系表如下所示

category_id       product_id
23                72
33                72
43                72
23                32
33                18
例如,我想做的是选择属于类别23,33,43的所有产品id。在这种情况下只有72个。注意,我试图捕获属于所有ID的产品,而不是或。所以这个qry不起作用

SELECT * FROM products AS p JOIN prod_to_cat AS pc ON p.products_id=pc.products_id IN(23,33,43)
所以我试着

SELECT * FROM products AS p JOIN prod_to_cat AS pc ON p.products_id=pc.products_id WHERE pc.categories_id=23 AND pc.categories_id=33 AND pc.categories_id=43
如果只有一个类别,它就可以完美地工作,但当它变成多个类别时,它将不会显示任何结果

我也在这里寻找解决方案,并找到了一个建议

SELECT * FROM products AS p JOIN prod_to_cat AS pc ON p.products_id=pc.products_id 
WHERE exists (select * from prod_to_cat c where c.products_id=p.products_id AND c.categories_id=23) 
AND exists (select * from prod_to_cat c where c.products_id=p.products_id AND c.categories_id=33)
AND exists (select * from prod_to_cat c where c.products_id=p.products_id AND c.categories_id=43)
但这似乎产生了重复的结果


那么正确的方法是什么呢?

如果您只想获取必须属于类别(如6和18)的产品,请尝试以下查询:

SELECT * FROM `prod_to_cat` WHERE `categories_id` IN (6, 18) GROUP BY `products_id` HAVING COUNT(DISTINCT `categories_id`) = 2 ORDER BY `products_id` ASC

您使用的是哪种数据库管理系统?