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

有条件的内部加入

梁烨烨
2023-03-14
问题内容

我希望能够基于表达式的结果内部联接两个表。

到目前为止,我一直在尝试:

INNER JOIN CASE WHEN RegT.Type = 1 THEN TimeRegistration ELSE DrivingRegistration AS RReg
ON
RReg.RegistreringsId = R.Id

RegT是我在此联接之前进行的联接:

INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id

该SQL脚本不起作用。

因此,总的来说,如果aType为1,则它应在表上TimeRegistration联接,否则应在上联接DrivingRegistration

解决方案:

在我的选择语句中,我执行了以下联接:

INNER JOIN  RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
LEFT OUTER JOIN TimeRegistration AS TReg ON TReg.RegistreringsId = R.Id AND RegT.Type = 1
LEFT OUTER JOIN DrivingRegistration AS DReg ON DReg.RegistreringsId = R.Id AND RegT.Type <>1

然后where-clause,根据进行编辑,以输出正确的内容RegType,如下所示:

WHERE (CASE RegT.Type WHEN 1 THEN TReg.RegistreringsId ELSE DReg.RegistreringsId END = R.Id)

问题答案:

尝试使用LEFT JOIN的将两个表放入查询中

LEFT JOIN TimeRegistration TR ON r.rid = TR.Id AND RegT.type =1 
LEFT JOIN DrivingRegistration DR ON r.rid = DR.Id AND RegT.type <>1

现在,在您的select子句中,使用

CASE RegType.Type WHEN 1 THEN TR.SomeField ELSE DR.someField END as SomeField

另一种选择是使用动态SQL



 类似资料:
  • 我想忽略createAlias中的默认连接限制。我有一段一刀切的关系。 我的问题是Hibernate为连接关系生成默认限制。 波约 注:费用表中没有诊断模板栏。 Charge.java 诊断emplate.java 查询 标准 Hibernate查询 如何避免这种情况?或者我的关系有什么问题? 请帮帮我。。!

  • 问题内容: 我正在尝试编写带有条件的嵌套联接查询。 我现在有的查询是: 输出以下SQL: 还有以下错误: 它告诉我没有列store.retailer_id,但是,我可以运行以下查询,它将正常工作: 问题答案: 看起来您不需要在这里嵌套嵌套。尝试使用类似 嵌套连接也可以使用

  • 问题内容: 我想知道用户是否在2个相关表中的 任何 一个条目。 桌子 用户可以有一个雇员和/或学生的条目。如何在一个查询中获取该信息?我试过了: 但是它将仅返回在 两个 表中 都有 条目的用户。 SQL Fiddle示例 问题答案: 您可以使用外部联接: 或者(如果您对EMPLOYEE或STUDENT表中的数据不感兴趣)

  • 我需要一个灵活的过滤器来过滤所有代码中的多个EventListener。我可以使用@EventListener(condition=“event.enabled”),但我的过滤器需要分析fooEvent的许多属性。 我希望我可以使用应用程序上下文中的谓词Bean: 但我得到: 是否可以为EventListerns使用外部复杂条件?或者至少定义具有复杂条件的全局侦听器,并在不重复完整条件的情况下继承

  • 问题内容: 我花了几个小时进行搜索,没有发现与我的案子相似的内容。 让我们假设以下多对多数据模型: 现在,假设我要映射与合同方(单向)有关的 所有 合同。可以使用实体类中的以下注释来完成: 那样就好。 但是我要寻找的是如何映射具有 特定角色的 合同? 从技术上讲,我正在寻找一种在JOIN语句中添加 额外条件 的方法。 到目前为止,在类似的主题中发现了以下想法: 将联接表映射为单独的实体,并使用自定

  • 问题内容: 这是对我之前回答的问题的修改 我在下表中有数据: 我想获取仅包含13和15的用户ID。因此,根据上面的示例,我只能返回 下面的查询是在我之前的答案中提供的,而该部分是我添加的,但是并没有达到目标。 问题答案: 假设的组合和是独一无二的,你可以这样做 如果and的组合不是唯一的,那么原始的in是必要的,事情会变得更具挑战性。