2011-07-21 31 views
4

說我有一個包含兩個表的數據庫:類和學生。每個表格都包含有關相關主題的元數據。例如,班級包含'classid','name'和'room_number'字段,學生包含'name','classid','age'和'height'字段(例如學生只能在一個班級中)。HQL:在對象上使用元素()

如果我想編寫一個HQL查詢以獲得所有包含姓名爲'Joe','Bob'和'Fred'的學生的課程,該怎麼辦?如果學生只包含'classid'和'name',我想我可以在HQL中編寫以下內容。

from Classes as class where 
    'Joe' in elements(class.students) and 
    'Bob' in elements(class.students) and 
    'Fred' in elements(class.students) 

但是,在這種情況下,學生是一個對象。我是否需要明確執行連接?

from Classes as class 
    join class.students as s1 
    join class.students as s2 
    join class.students as s2 
where 
    s1.name = 'Joe' 
    s2.name = 'Bob' 
    s3.name = 'Fred' 

我想,用'Fred' in elements也執行這些連接,但它更緊​​湊寫!還是有更好的方法來完成這一切?

+0

我還可以使用子查詢。我猜想連接更容易優化 - 但我真的不知道。有沒有簡單的方法來組成嵌套的子查詢? – schmmd

回答

6

使用子選擇:

from Classes c 
where c.classid in(
     select s.classid from students s where s.name in('Joe', 'Bob', 'Fred') 
    ) 
+1

我的查詢選擇包含全部三個學生'Joe','Bob'和'Fred'的類。您查詢選擇包含'Joe','Bob'或'Fred'的類。 – schmmd