如何在HQL查询中检查NULL或无效

时间:2014-10-20 13:55:57

标签: mysql sql database oracle hql

我有两个不同的表工件和分类。我想检索没有分类的工件列表。分类表包含ID(PK),Artifact_Id(外键),Active(0/1),而工件表包含ID(PK),Name。每个工件都可以有很多分类。我想在没有分类的情况下返回工件列表(即分类不包含该工件或工件具有分类但所有实例都不活动(0))

例如

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和2没有分类但是3具有分类,因为一个实例是活动的(1)。所以我想返回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

1 个答案:

答案 0 :(得分:3)

在SQL中,您可以使用

执行此操作

SELECT * FROM Artifact WHERE Id NOT IN(     SELECT Artifact_id FROM Classification WHERE active = 1);

基本上,您获得了所有具有活动分类的Artifact ID列表,然后只获得该列表中的工件,即非活动分类或根本没有分类。