如果我做对了,您的问题可以归类为关系分裂。基本上有两种方法可以解决此问题:
1a)全部x:p(x)
在SQL中必须将其转换为:
1b)不存在x:不存在p(x)
对于您的问题,可能是这样的:
SELECt e.* FROM events eWHERe NOT EXISTS ( SELECt 1 FROM PARTICIPANTS p WHERe p.status <> 'present' AND p.event_id = e.event_id)
即,任何不存在参与者的给定事件,使得状态!=’present’
这样做的另一种主要方法是将参与者的数量与具有当前状态的参与者的数量进行比较
SELECt e.id FROM events eJOIN participants p ON p.event_id = e.id GROUP BY e.event_id HAVINg count(*) = count( CASE WHEN p.status = 'present' then 1 end )
两种解决方案都未经测试,所以那里可能有错误,但这应该可以帮助您入门



