MySQL:过滤不同行中的多个值,但只返回与两个值匹配的行

时间:2013-11-11 13:31:27

标签: php mysql sql filter

这个问题一直困扰着我很长一段时间,而且我从来没有真正弄明白这一点。

我想要的是找到所有匹配多个option_ids的产品,

例如:我希望所有产品ID都具有选项ID为20和28.查询应该返回2个结果。产品ID 1和4并且不返回id 3,因为它只匹配其中一个选项ID,而不是两者都匹配。

| product_id |  option_id |
---------------------------
| 1          |  20        |
| 1          |  24        |
| 1          |  28        |
| 2          |  28        |
| 3          |  19        | 
| 3          |  20        | 
| 3          |  28        |
| 4          |  28        | 
| 4          |  30        |
---------------------------

3 个答案:

答案 0 :(得分:2)

SELECT product_id 
FROM your_table 
WHERE option_id IN (20,28) 
GROUP BY product_id
having count(distinct option_id) = 2

答案 1 :(得分:1)

使用HAVING子句:

SELECT 
  product_id, 
  COUNT(DISTINCT option_id) AS option_count 
FROM t 
WHERE 
  option_id IN (20, 28) 
GROUP BY 
  product_id 
HAVING 
  option_count=2

答案 2 :(得分:0)

SELECT product_id FROM table WHERE option_id IN (20,28) GROUP BY product_id