0
我想在不使用連接的情況下以多對多關係選擇父級子集合的主鍵。由於此示例中已刪除的其他約束條件,查詢必須發生在子級別(Tag)而不是父級別(Item)上。在nHibernate中未加入的情況下選擇子集合ID
Item item = null;
Tag tag = null;
var qoTags = QueryOver.Of<Tag>(() => tag)
.JoinQueryOver(x => x.Items,() => item)
.Select(Projections.Group<Item>(() => item.ItemId));
生成
SELECT Item.ItemId
FROM Tag
inner join ItemsTags on Tag.TagId = ItemsTags.TagId
inner join Item on ItemsTags.ItemId = Item.ItemId
GROUP BY Item.ItemId
但理想的是,生成的SQL是:
SELECT ItemsTags.ItemId
FROM Tag
inner join ItemsTags on Tag.TagId = ItemsTags.TagId
GROUP BY ItemsTags.ItemId
通知不必要加入被去除,並且 '組由' 和 '選擇' 的條款在引用聯結表的ID。
謝謝!
您是否比較了兩個查詢的實際查詢計劃?這兩個查詢可能以相同的方式執行。 – biziclop
是的,執行計劃顯示加入項目表的一小筆費用。通常情況下,我會接受這個成本,但Item表有兩個子類(表)。因此,與Item結合會導致3次無關聯,約佔查詢成本的60%。 – Sardonic