如何使用AND语句筛选产品选项?AND条件分组方法咨询
解决你的SQL筛选问题
嘿,我明白你遇到的问题了——你想筛选出product_id=100且同时具备两个特定选项组合的记录,但原来的SQL写法逻辑上存在矛盾:单条cart_option记录只能对应一个option_id和它的option_value_id,所以用AND直接把两个不同option_id的条件连在一起,永远查不到结果。
下面给你两种正确的写法,根据你的需求选择:
方法一:使用GROUP BY + HAVING(适合只需要确认产品是否符合条件)
这种方式会先筛选出符合任一选项条件的记录,再通过分组统计确保该产品同时满足两个条件:
SELECT product_id FROM `cart_option` WHERE product_id = 100 AND ( (option_id = 2 AND option_value_id = 3) OR (option_id = 1 AND option_value_id = 2) ) GROUP BY product_id HAVING COUNT(DISTINCT option_id) = 2;
- 逻辑:先把符合两个选项条件之一的记录捞出来,然后按
product_id分组,检查分组里的不同option_id数量刚好是2(说明两个条件都满足)。
方法二:使用EXISTS子查询(适合需要获取具体选项记录)
如果你想拿到该产品下所有符合条件的选项记录,可以用两次EXISTS分别验证两个选项是否存在:
SELECT co.* FROM `cart_option` co WHERE co.product_id = 100 AND EXISTS ( SELECT 1 FROM `cart_option` co1 WHERE co1.product_id = co.product_id AND co1.option_id = 2 AND co1.option_value_id = 3 ) AND EXISTS ( SELECT 1 FROM `cart_option` co2 WHERE co2.product_id = co.product_id AND co2.option_id = 1 AND co2.option_value_id = 2 );
- 逻辑:先锁定
product_id=100的记录,然后分别检查该产品是否存在option_id=2+value=3和option_id=1+value=2的选项,只有两个都存在时才返回对应的记录。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

