「event」と「event_exception」の2つのテーブルがあります。テーブル「event」には、イベントが毎年定期的に発生するかどうかを示す(ブール)列「regular」があります。テーブル「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_
。