我有两个不同的表工件和分类。我想检索没有分类的工件列表。分类表包含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
答案 0 :(得分:3)
在SQL中,您可以使用
执行此操作SELECT * FROM Artifact WHERE Id NOT IN( SELECT Artifact_id FROM Classification WHERE active = 1);
基本上,您获得了所有具有活动分类的Artifact ID列表,然后只获得该列表中不的工件,即非活动分类或根本没有分类。