当值不在联接表中时选择

本文关键字:选择 | 更新日期: 2023-09-27 18:20:21

我有两个实体(实体被简化):

参与

[ActiveRecord]    
public class Participation
{
    [PrimaryKey]
    public int Id {get;set;}
    [HasMany(...)]
    public IList<ParticipationEvent> GeneratedEvents {get;set;}
}

和参与事件

[ActiveRecord]    
public class ParticipationEvent
{
   [PrimaryKey]
   public int Id {get;set;}
   [BelongsTo]
   public ProgramParticipation {get;set;}
   [Property]
   public int Code {get;set;}
}

其中(正如您所看到的)参与有许多活动。每个事件都有一个唯一的代码。

我想要的是,选择所有没有特定活动的参与者。如何使用NHibernate?我知道我可以使用INNER JOIN来轻松地获得某个事件的所有实例,但这可以用另一种方法吗?

当值不在联接表中时选择

Hibernate/NHubernate支持LEFT OUTER JOIN,它选择表a中连接到表B的所有记录,即使B没有对应的记录。要获取A中不在B中的记录,只需添加WHERE表B.SoleNonNullableColumn IS NULL即可。不可为null的列可以为null的唯一方法是因为LEFT OUTER JOIN中有一行,而表B根本不显示。