2014-10-20 31 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