【问题标题】:Nhibernate simple self joinNhibernate 简单的自连接
【发布时间】:2011-12-18 05:04:58
【问题描述】:

我有一个包含这些字段的表格:

ID (Primary key)
Name 
Some more data fields

我想编写一个查询,给定一个 Name 会给我所有 ID 大于该名称的行的行。

(是的,我知道名字不是唯一的......在系统中是。)

我想要类似的东西:

select *
From SomeTable as x
WHERE x.ID> (Select ID from SomeTable as y where y.Name LIKE :param)

或:

SELECT x
FROM SomeTable as x
JOIN SomeTable as y ON x.ID > Y.ID
WHERE Y.Name LIKE :Param

我当然想要自联接,而不是子查询。


顺便说一句。 标准也...

【问题讨论】:

    标签: c# hibernate nhibernate hql criteria


    【解决方案1】:

    您将无法通过加入 HQL 来做到这一点。

    但是这个 HQL 查询是可以的:

    select f from Foo f where f.id > (select f2.id from Foo f2 where f2.name = :name)
    

    如果子选择可能返回多个 ID,您也可以使用

    select f from Foo f where f.id > all (select f2.id from Foo f2 where f2.name = :name)
    

    【讨论】:

    • 不会在 HQL 中使用 SubSelect 导致 SQL 中出现 SubSelect?这会让它运行得慢很多?
    • 为什么子选择一定会导致查询慢很多?尝试执行它,在没有子选择的情况下针对查询测量它,检查解释计划并微调索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多