擅长:python、mysql、java
<p>如果没有<code>GROUP BY</code>,则不能使用<code>HAVING</code>。不管怎样,在这种情况下这两个都不是必需的,需要的是<code>EXISTS</code>。假设您已经为<code>Event.exceptions</code>定义了一个SQLAlchemy关系,下面的表达式应该可以工作:</p>
<pre><code>session.query(Event).filter(or_(
and_(
Event.regular == True,
~Event.exceptions.any(and_(
EventException.year == current_year,
EventException.occurs == False,
)),
),
and_(
Event.regular == False,
Event.exceptions.any(and_(
EventException.year == current_year,
EventException.occurs == True,
)),
),
))
</code></pre>
<p>并生成如下SQL:</p>
^{pr2}$
<p>编辑:第一个条件应该使用<code>NOT EXISTS</code></p>