带关联的Grails查询 - 在id不在另一个表中的表中查找所有内容

时间:2010-01-07 00:22:25

标签: sql hibernate grails criteria

我需要能够在表中找到每个项的id不在关系映射表中的所有项。换句话说,我有一个表,每行有一个id。如果该ID在地图表中,则不应显示在我的列表中。

我正在考虑查询我的地图表中的所有ID,然后转身并查询我的主表以排除任何具有该ID的项目...所以类似于:

从Main中选择*,其中id不在(从Map中选择main_id);

有没有一种好方法可以通过findBy方法或可能的条件构建器查询对grails执行此操作?

1 个答案:

答案 0 :(得分:6)

如果你正在使用Hibernate,你应该可以使用HQL,使用not in和子查询(here's a page of examples)来实现这一点:

from Main as main where main.id not in (select map.main_id from Map as map)

基于this page,我认为您需要使用Main.findAll方法执行此查询:

def results = Main.findAll("from Main as main where main.id not in (select map.main_id from Map as map)")