如何获取mysql中IN子句定义的所有项目

时间:2018-08-26 09:03:05

标签: mysql

我在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子句?

2 个答案:

答案 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,因此具有更好的性能。