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。有什么想法吗?这个答案非常令人满意,因为元素的维度在查询中有明确的说明,并且可以轻松地用于更高维度的表。