2011-08-31 48 views
3

我試圖獲得兩個不同設備的測量對,加入時間戳相同。在SQL中,此按預期工作:HQL預期加入路徑(加入同一張表時)

select 
    leftItem.Timestamp, leftItem.Value, rightItem.Value 
from 
    DataTable leftItem 
    inner join DataTable rightItem 
    on leftItem.Timestamp = rightItem.Timestamp 
where 
    leftItem.Device = 1 and rightItem.Device = 2 

但如果我嘗試將其轉換爲HQL:

select 
    left, right 
from 
    DataTable as left 
    inner join DataTable as right 
    on left.Timestamp = right.Timestamp 
where 
    left.Device = 1 and right.Device = 2 

我得到一個NHibernate.Hql.Ast.ANTLR.SemanticException:

 
Path expected for join! 

如何指定一個「路徑「到同一張桌子?

+0

是什麼?你在HQL嘗試,當你得到這個錯誤? –

+0

@Stefan:實際上也是這個查詢。 (好吧,我會編輯它來澄清) – Groo

回答

6

在HQL中,只能對實體之間的關聯進行連接。如果你想在別的東西加入,唯一的可能性就是讓在加入where子句:

select left, right 
from 
    DataTable as left, DataTable as right 
where 
    left.Timestamp = right.Timestamp 
    and left.Device = 1 
    and right.Device = 2 
+0

謝謝!在服務器上如何評估這種差異(性能方面)?或結果有差異?畢竟,我也可以訴諸普通的SQL。 – Groo

+0

打開SQL日誌記錄以查看生成的SQL,並比較兩個執行計劃。這與數據庫有關。 –

+0

這就是我在SSMS中所做的,計劃是相同的,謝謝。 – Groo