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

有条件的Rails Nested加入Activerecord

袁鸿畴
2023-03-14
问题内容

我正在尝试编写带有条件的嵌套联接查询。

我现在有的查询是:

Event.joins(:store => :retailer).where(store: {retailer: {id: 2}})

输出以下SQL:

   SELECT "events".* FROM "events" INNER JOIN "stores" ON "stores"."id" = "events"."store_id" INNER JOIN "retailers" ON "retailers"."id" = "stores"."retailer_id" WHERE "store"."retailer_id" = '---
:id: 2
'

还有以下错误:

SQLite3::SQLException: no such column: store.retailer_id: SELECT "events".* FROM "events" INNER JOIN "stores" ON "stores"."id" = "events"."store_id" INNER JOIN "retailers" ON "retailers"."id" = "stores"."retailer_id" WHERE "store"."retailer_id" = '---
:id: 2
'

它告诉我没有列store.retailer_id,但是,我可以运行以下查询,它将正常工作:

Event.first.store.retailer_id
  Event Load (0.2ms)  SELECT  "events".* FROM "events"   ORDER BY "events"."id" ASC LIMIT 1
  Store Load (0.1ms)  SELECT  "stores".* FROM "stores"  WHERE "stores"."id" = ? LIMIT 1  [["id", 28958]]
=> 4

问题答案:

看起来您不需要在这里嵌套嵌套。尝试使用类似

Event.joins(:store).where(stores: {retailer_id: 2})

嵌套连接也可以使用 stores

Event.joins(:store => :retailer).where(stores: {retailer: {id: 2}})


 类似资料:
  • 问题内容: 我希望能够基于表达式的结果内部联接两个表。 到目前为止,我一直在尝试: RegT是我在此联接之前进行的联接: 该SQL脚本不起作用。 因此,总的来说,如果a为1,则它应在表上联接,否则应在上联接。 解决方案: 在我的选择语句中,我执行了以下联接: 然后,根据进行编辑,以输出正确的内容,如下所示: 问题答案: 尝试使用LEFT JOIN的将两个表放入查询中 现在,在您的select子句中

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

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

  • 我有点卡住了。这个问题很接近我需要的,但不完全是: [Products_Final]是订单id上带有订单表的联接表 订单表是 诸如此类 所以如果我这样做了 我想要的是基于不同水果和国家组合的的总数,因为Product_id2看起来可能是重复的顺序。 如果我做了区分,总和似乎不起作用。 我如何把这两件事结合在一起?下面的我也试过了但是接不上

  • 我有3个表格:我的Laravel 5项目的产出、产品和服务。 我想基于此条件在一个查询中连接这3个表: 如果(p=产品)获取products.name 如果(s=服务)获取服务。名称

  • 问题内容: 我想基于从客户端传递的String参数注入一个bean。 我希望基于传递的参数注入报表实例。任何帮助将不胜感激。提前致谢 问题答案: 使用工厂方法模式: 当您使用以下命令调用控制器时,Spring可以创建报告类型: 但是,它非常笨拙,并且每次添加新报告类型时都需要进行修改。如果报告类型列表已修复,则可以。但是,如果您计划添加越来越多的类型,这将是一个更可靠的实现: 通过此实现,添加新的