MySQL表看起来像

product_id    material
----------------------
1             A
1             B
1             C
2             A
2             B
3             A
3             B
3             C
3             D
4             A
4             B
4             D

我要所有那些有A,B,C材料的产品
因此输出应该是1,3
使用group by似乎很合适,但是如何传递多个要匹配的材料。
要匹配的材料数量可能不同,即第一个查询可能是材料A、B、C的输出:1、3,第二个查询可能是材料A的输出:3、4
我应该在java程序的Hibernate中编写什么查询,以及mysql查询?

最佳答案

查询

SELECT product_id
FROM products
WHERE material IN ('A', 'B', 'C')
GROUP BY product_id
HAVING COUNT(DISTINCT material) = 3;

SQL Fiddle Demo

10-04 19:02