2010-01-07 7 views
1

Je dois être en mesure de trouver tous les éléments d'une table où l'ID de chaque élément n'est pas dans une table de mappage relationnel. En d'autres termes, j'ai une table où chaque rangée a un ID. Si cet identifiant est dans une table de carte, il ne devrait pas apparaître dans ma liste.Requête de Grails avec des associations - tout trouver dans une table où ID n'est pas dans une autre table

Je pensais interroger ma table de carte pour tous les id en elle, puis en tournant autour et interroger ma table principale pour exclure tous les éléments qui ont cette id ... si quelque chose comme:

select * from principal où id not in (sélectionnez main_id de Map);

Existe-t-il un bon moyen de le faire avec grails soit par une méthode findBy, soit par une requête de générateur de critères?

Répondre

6

Si vous utilisez Hibernate, vous devriez être en mesure de le faire avec HQL, en utilisant un not in et un sous-requête (here's a page of examples):

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

Basé sur this page, je crois que vous devez exécuter cette requête dans une Main.findAll méthode:

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

Je pensais que je l'ai fait avant et cela ne fonctionnerait pas correctement. Je faisais apparemment quelque chose de mal parce que cela fonctionne vraiment. Je vous remercie. – intargc

Questions connexes