2014-10-20 63 views
0

我有两个不同的表格神器和分类。我想检索没有分类的工件列表。分类表包含ID(PK),Artifact_Id(外键),活动(0/1),而工件表包含ID(PK),名称。每件神器可以有很多分类。我要回文物的名单时,有没有分类为它(即分类并不包含神器或当工件都有分类,但所有情况下都是未激活(0))如何在HQL查询中检查NULL或无效

例如

Artifact 
Id Name 
1 xyz 
2 pqr 
3 abc 

Classification 
Id Artifact_id active 
a1 1   0 
a2 1   0 
a3 1   0 
a4 3   0 
a5 3   1 

在上述情况下,由于一个实例处于活动状态(1),所以工件1和2没有分类,但3具有分类。所以我想返回1和2.我不知道如何查询这个。 这是我曾尝试(虽然不是太多,是错误的)

def list = findAll("from artifact as a full outer join classification as c on a.id=c.artifact_id where active == 0 OR c.aritfact_id is NULL,[max:limit, offset:startPos]) 

我也试过在SQL东西

select * from ARTIFACT full outer join classification on artifact.id = classification.ARTIFACT_ID where sum(classification.active) == 0 OR classification.aritfact_id is NULL 

回答

3

在SQL你可以用

SELECT *做到这一点FROM工件,其中没有( SELECT Artifact_id FROM Classification WHERE active = 1);

基本上,您会得到所有具有活动分类的Artifact Ids列表,然后在该列表中只获取而非的Artifacts,即非活动分类或根本没有分类。

+0

非常感谢这帮了我很多:) – krs8785 2014-10-20 14:53:52

+0

你会有任何机会知道如何在hql中工作? – krs8785 2014-10-20 15:10:05

+0

NOT IN由HQL支持,因此只需引用对象就可以工作,如下所示:从artifact art中选择art,其中art.Id不在(从c中选择c.Artifact_id,其中c.active = 1) – Alla 2014-10-21 10:49:15