我在mysql中有一个表Events,其中包含日期和事件类型,如下所示:
Date Event
1.11.2017 A
1.11.2017 B
1.11.2017 C
1.11.2017 D
2.11.2017 B
2.11.2017 C
2.11.2017 D
3.11.2017 A
3.11.2017 C
3.11.2017 E
4.11.2017 A
4.11.2017 B
4.11.2017 D
我想找出包含事件A和B的日期。在上面的示例中,这将是1.11.2017和4.11.2017。 我尝试了IN子句
select distinct Date from Events
where Event in ('A', 'B')
但是此子句返回存在任何条件项(A或B)的行。
如何在必须包含所有列出的条件的情况下实现这种IN子句?
答案 0 :(得分:1)
我使用了一个子查询来计算A和B的出现次数。此解决方案假定每天的A或B不超过一个。
SELECT DISTINCT e1.eventDate
FROM events e1
JOIN (SELECT eventDate, count(*) count
FROM events
WHERE type IN ('A', 'B')
GROUP BY eventDate) as e2 ON e2.eventDate = e1.eventDate
WHERE e2.count > 1
答案 1 :(得分:0)
尝试一下:
select `Date` from Events
where Event in ('A', 'B')
group by `Date`
having count(*) = 2
它不需要JOIN
,因此具有更好的性能。