MySQL查询以选择至少包含一定数量元素的组

MySQL查询以选择至少包含一定数量元素的组,mysql,sql,Mysql,Sql,我有下表: +-------------------+ | Id | G_id | E_id | +-------------------+ | 1 | 1 | 1 | --------------------- | 2 | 1 | 2 | --------------------- | 3 | 2 | 1 | --------------------- | 4 | 2 | 3 | --------------------- |

我有下表:

+-------------------+
| Id | G_id | E_id  |
+-------------------+
| 1  |   1  |   1   |
---------------------
| 2  |   1  |   2   |
---------------------
| 3  |   2  |   1   |
---------------------
| 4  |   2  |   3   |
---------------------
| 5  |   3  |   1   |
---------------------
| 6  |   3  |   2   |
---------------------
| 7  |   3  |   3   |
+-------------------+
其中G_id是一个组的id,包含由其E_id标识的几个元素。例如,组1由元素1和2组成,组2由元素1和3组成,组3由元素1、2和3组成


我想对这个表进行查询,以便它返回至少包含元素1和3的所有组,即组2和3。谢谢

您需要
分组依据
拥有
子句

select G_id 
from yourtable 
where E_id in (1,3)
group by G_id 
having count(distinct E_id) = 2
更新:

select G_id 
from yourtable 
group by G_id 
having count(case when E_id = 1 then 1 end) > 0
   and count(case when E_id = 3 then 1 end) > 0
   and count(distinct E_id) = 3

顺便说一句,考虑到
(G\u id,E\u id)
看起来是唯一的,id在这个表中似乎没有任何作用。的确,id列似乎没有用处,但如果任何其他解决方案涉及到这个列,它就会被保留下来。不会有(事实上,具有讽刺意味的是,给出的答案假设有一个id列。否则,DISTINCT将是多余的;-)谢谢。我想使用您的查询检索至少由元素1和3组成的三个元素的所有组,方法是将
having count(distinct E_id)=2
替换为
having count(distinct E_id)=3
。不幸的是,这不起作用,因为在
中,(1,3)
数组(1,3)中的E_id的维数低于3。有什么想法吗?这个答案非常令人满意,因为元素的维度在查询中有明确的说明,并且可以轻松地用于更高维度的表。