我有两个表,“event”和“event_exception”。表“事件”有一个(布尔)列“常规”,指示事件是否每年定期发生。表“event_exception”具有列“event_id”、列“year”和(布尔)列“occurs”。
数据应以这种方式解释:
- 有些事件每年都会定期发生,但有时它们会异常地不发生,这是由“event.regular == True”的“event”行和“event_exception.occurs == False”的“event_exception”行编码的每年都会特别省略该事件。
- 有些事件不会定期发生,但有时它们会异常发生。这是由“event.regular == False”的“event”行和“event_exception.occurs == True”的“event_exception”行编码的,用于事件异常发生的每一年。
如何编写一个匹配今年将发生的所有事件的查询?
我的猜测是
session.query(Event, EventException).filter(Event.id==EventException.event_id)
.filter(EventException.year==current_year).
filter(or_(
and_(Event.regular==1, EventException.occurs==0, having(count(EventException)==0)),
and_(Event.regular==0, EventException==1, having(count(EventException)>0)
))
,但我不确定该having
子句是否可以在and_
.