Sql 使用多个参数选择属于关系数据库的行
我试图从一个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
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
您使用的是哪种数据库管理系统?