【问题标题】:Join an ActiveRecord model to a table in another schema with no model将 ActiveRecord 模型连接到另一个没有模型的模式中的表
【发布时间】:2019-11-08 16:58:30
【问题描述】:

我需要将我的 Ruby on Rails 应用程序中的 ActiveRecord 模型加入到另一个没有模型的不同模式中的表中。我已经搜索了答案,并找到了其中的一部分,但在一个地方没有找到完整的解决方案,因此提出了这个问题。

我有车辆模型,有数百万行。

我在同一个数据库的另一个模式 (temp_cars) 中有一个表 (reload_cars),有几百万条记录。这是一个 ad hoc 表,用于一次 ad hoc 数据更新,并且永远不会再次使用。没有与该表关联的模型。

我一开始很懒,在一个查询中将所有 reload_cars 记录选择到一个数组 (reload_vins) 中,然后在第二个查询中执行如下操作:

`Vehicle.where(vin_status: :invalid).where('vin in (?)', reload_vins)`. 

这与实际查询相比有所简化,但演示了我需要的连接。在其他查询中,我需要这些表之间的全套内部和外部联接。我还需要在不同的步骤中将各种选择标准放在模型表和/或非模型表上。

这种直截了当的方法在开发中运行良好,但无法扩展到生产数据库。我认为这需要几分钟,这对于一次性操作来说已经足够快了。但是,它超时了,尤其是在遍历记录集时。小的调整没有帮助。

所以,我需要做一个合法的加入。

【问题讨论】:

    标签: ruby-on-rails join activerecord schema


    【解决方案1】:

    回想起来,答案似乎很明显。这个查询几乎立即运行,并给出了准确的预期结果,每个表都有各种标准。

    这是一个这样的查询:

    Vehicle.where(vin_status: :invalid)
           .joins("
                   join temp_cars.reload_cars tcar
                   on tcar.vin = vehicles.vin
                   where tcar.registration_id is not null
           ")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多