传递一个列表,在where/having子句中匹配

sid*_*v29 2 java mysql hibernate

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
Run Code Online (Sandbox Code Playgroud)

我想要所有那些有材料A,B,C的product_id

因此输出应为1,3

使用group by似乎合适,但如何传递多个材料进行匹配.

要匹配的材料数量可以变化,即第一个查询可能是材料A,B,C
输出:1,3
和第二个查询可能是材料A,D
输出:3,4

我应该在java程序中用Hibernate编写什么查询,以及mysql查询?

Ull*_*las 5

询问

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

SQL小提琴演示