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

thtygnil  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(298)

我在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事件的日期。在上述示例中,这将是2017年11月1日和2017年11月4日。我试过用in子句

select distinct Date from Events 
    where Event in ('A', 'B')

但是这个子句返回存在任何条件项(a或b)的行。
在必须包含所有列出的条件的情况下,我如何实现这种in子句?

aiqt4smr

aiqt4smr1#

我使用子查询来计算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
0x6upsns

0x6upsns2#

试试这个:

select `Date` from Events
where Event in ('A', 'B')
group by `Date`
having count(*) = 2

它不需要 JOIN ,从而具有更好的性能。

相关问题