当前位置: 首页 > 面试题库 >

Linq to NHibernate生成到同一表的多个联接

壤驷向明
2023-03-14
问题内容

当我在where子句中对select中的同一表进行引用时,linq to Nhibernate会生成两个联接,一个用于select,一个用于where。IE

from child in Session.Query<Child>()
where child.Parent.Name == "Bob" 
select new Info 
{ 
   ParentAge = child.Parent.Age, 
   ChildName = child.Name
};

生成如下的SQL:

Select this_.Name,
       parent1.Age
From Child this_
     left join Parent parent1 on child.ParentId = parent1.Id,
Parent parent2

Where child.ParentId = parent2.Id and parent2.Name = 'Bob'

我本以为我应该更喜欢SQL:

Select this_.Name,
       parent1.Age
From Child this_
         inner join Parent parent1 on child.ParentId = parent1.Id
Where parent1.Name = 'Bob'

有没有一种方法可以构造查询来实现这一点?有关系吗?


问题答案:

您是否尝试过比较SSMS中每个查询的查询执行计划?如果在SQL
Server中消除了重复的联接,则没关系。我发现在某些情况下,我认为生成的查询将非常低效,但经过优化后,它最终与 看起来 更好的查询完全相同。



 类似资料:
  • 问题内容: class Match(Base): tablename = ‘matches’ 我需要编写一个查询,该查询将列和团队表连接在一起,以显示本地和客队的团队信息。 这返回 问题答案: 首先,您的代码不起作用的原因是因为SQLAlchemy不知道您是否要通过via或加入,因此您必须告诉它。此外,您需要加入两次,这使事情变得更加复杂。 使用以下命令可以更轻松地完成此操作: 并且将在相同的查询

  • 有两个具有某些值的表。 表1 表2 其中1,2,3是行 我想在python中找到这两个表之间的关系 合成相关表

  • 假设我有两个表和。包含和列。有两列和,它们链接回的列。

  • 问题内容: 如何选择多个表并从同一列联接多个行? 它不会返回,并且。我确定此SQL代码段的语法错误。 更新: 显示。移除后 它返回: 但我需要退货: 问题答案: 您可以多次连接到同一张表,而只需提供不同的别名

  • 问题内容: 我正在尝试在SQL Server的同一张表之间创建多对多关系。 我有一张桌子,上面有列和。 关系遵循以下规则: 一个孩子可以有很多父母 父母可以有很多孩子 ObjectA可以是ObjectB的子代,而ObjectB可以是ObjectA的子代 但是对象不能是其本身的直接子代 所以我创建第二个表格的列和,当然我希望这些关系通过级联删除。 但是当我在SQL Server中尝试此操作时,出现错

  • 使用Spring kafka模板,我有2个不同的生产者,他们使用相同的键向主题发送不同的消息,始终以相同的形式: 生产者1:发送密钥:1消息:abc分区0 生产者2:发送密钥:2消息:def 我有3个分区,所有消息都根据消息键发送到同一个分区。 现在,我需要确保,根据某些属性,特定消息将发送到特定分区,以便能够管理系统中的某些优先级。 问题是生产者2无法知道生产者1选择了哪个分区。 Kafka确保