如果没有一个例子,我无法很好地说出我的问题,所以我的谷歌搜索不是很成功。
我有一个带有
列的完成表activity_id | learner_id | completed date
我想获得一个learner_ids列表,其中存在activity_ids 1,2和3。
对于上下文,所以我可以为活动ID为4的所有学习者添加一个活动完成行,但仅限于那些已经完成1 2和3的学习者。我无法弄清楚如何获取我需要的数据!
答案 0 :(得分:2)
我不认为你已经 你的例子很好地解释了它。
我想获得一个mathner_ids列表,其中存在activity_ids 1,2和3
如何执行此操作取决于表的结构。假设在learner_id和activity_id上存在唯一约束,那么您只需使用:
即可SELECT learner_id
FROM yourtable
WHERE activity_id IN (1,2,3)
GROUP BY learner_id
HAVING COUNT(*)=3
如果您没有唯一约束,那么您需要使用:
HAVING COUNT(DISTINCT activity_id)=3
这种表现的好坏取决于所有三项活动的人数与缺少或更多的人数相比。在某些情况下,这可能会更快:
SELECT DISTINCT a.learner_id
FROM yourtable a
, yourtable b
, yourtable c
WHERE a.learner_id=b.learner_id
AND a.learner_id=c.learner_id
AND a.activity_id=1
AND b.activity_id=2
AND c.activity_id=3
;