2016-12-20 57 views
0

在某些其他條件下,可以使用'where'子句動態地過濾表,以確保只有一行被返回?我可以做這樣的事嗎?在HQL查詢的'where'子句中動態使用表中字段的值?

SELECT COUNT(*) FROM stud t1 
WHERE t1.name==SELECT name FROM (
    SELECT name, row_number() over (PARTITION BY name) AS rn 
    FROM stud t2) t3 
WHERE t3.rn==1; 

當然,上面的查詢只是一個虛擬的一個,但是在理論上可以過濾上面的where子句嗎?如果不是在更復雜的查詢情況下如何實現這種功能?

+0

我想問題不是如何通過課程查詢(取得成就的關鍵,上面的查詢僅僅是一個虛擬的一個),但是如果在上面的where子句中過濾是可能的? –

回答

0

是的。查詢可以這樣做:

SELECT COUNT(*) FROM stud t1 
WHERE t1.name = (SELECT name 
       from sometable 
       where somecondition); 

但您需要確保子查詢返回零或一行。如果您的查詢可能比一行返回更多,你可以使用IN代替:

SELECT COUNT(*) FROM stud t1 
WHERE t1.name IN (SELECT name 
       from sometable 
       where somecondition);