如何使用MySQL连接语句在连接表中选择符合多个值的记录?

我试图修复一个用于产品过滤的查询,这个查询对于单个类别来说工作正常,但当选择多个类别时就非常错误。该查询目前选择的是所有id符合一个cat_id或另一个cat_id的产品,这是个开始,但我不知道如何在categories_linked中只获得id符合两个所选cat_id的产品。

下面是一个例子,当选择两个过滤器时,目前正在运行的查询。

SELECT A.* FROM products A LEFT JOIN categories_linked B ON A.id = B.prod_id WHERE (B.cat_id = 1 || B.cat_id = 2) GROUP BY A.id;

例如,如果我按cat_id 1和2过滤,我希望返回id 1的产品,但目前它返回的是id 1、2和3的产品。WHERE子句是动态生成的,所以如果能维护就更好了。

类别_链接

cat_id|prod_id|
------+-------+
     1|      1|
     1|      2|
     2|      1|
     2|      3|

产品

id |title |
---+------+
  1| item1|   
  2| item2|  
  3| item3|    

解决方案:

感谢Reddit上的ur3pr0b8帮忙,当时不出所料,so不会。

SELECT products.* 
  FROM ( SELECT prod_id
          FROM categories_linked  
          WHERE cat_id IN ( 1 , 2 )
         GROUP
             BY prod_id
         HAVING COUNT(DISTINCT cat_id) = 2
       ) AS these       
INNER
  JOIN products
    ON products.id = these.prod_id

给TA打赏
共{{data.count}}人
人已打赏
未分类

使用expressmongoose将之前的对象数组替换为新的对象数组。

2022-9-9 20:32:39

未分类

从.txt文件中打印N行,输入C ++。

2022-9-9 20:32:41

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索