如何在 ActiveQuery 中合并两个双连接

How to merge two double joins in ActiveQuery

我有两个双连接(我相信它们会被考虑),单独进行它们似乎非常慢。我知道关于单个查询是否比多个查询更快,反之亦然,但我愿意尝试任何事情。

这是我现有的陈述:

line_stops = OpsHeader.joins(
        ops_stop_rec: :driver_header
      )
    .select(
        :pbbname,
        :pb_net_rev,
        :ops_driver1,
        :pb_id,
        :ops_stop_id,
        :dh_first_name,
        :dh_last_name,
        :ops_delivered_time
      )
      .where(
        :ops_stop_rec => {
            ops_arrive_time: params[:startDate] .. params[:endDate]
        })


    line_items = OpsHeader.joins(
        ops_stop_rec: :ops_line_items
      ).select(
        :pbbname,
        :opl_amount,
        :pb_id,
        :ops_type,
        :ops_stop_id,
        :ops_order_id,
        :ops_driver1,
        :ops_delivered_time
      )
      .where(
        :ops_stop_rec => {
            ops_arrive_time: params[:startDate] .. params[:endDate]
        }
      )

仅供参考,我是从一个旧的 Firebird 数据库中提取这些数据的,服务器硬件也不一定很快,所以可能比我想象的要多。另外,在将它提供给客户端之前,我必须在此基础上进行数据操作。

无论如何,这是我的联想:

class OpsHeader < ApplicationRecord
  belongs_to :pb_bill
  belongs_to :pb_master

  has_many :ops_stop_rec, foreign_key: 'ops_order_id'

  self.table_name = 'OPS_HEADER'
  self.primary_key = 'pb_id'
end
class OpsStopRec < ApplicationRecord
  #belongs_to :ops_order
  #belongs_to :ops_im_equip
  belongs_to :ops_header, foreign_key: 'pb_id'
  belongs_to :driver_header, foreign_key: 'ops_driver1'

  has_many :ops_line_items, foreign_key: 'opl_stop_id'

  self.table_name = 'OPS_STOP_REC'
  self.primary_key = 'ops_stop_id'


end
class OpsLineItem < ApplicationRecord
  #belongs_to :opl_order
  #belongs_to :opl_stop

  belongs_to :ops_stop_rec, foreign_key: 'ops_stop_id'

  self.table_name = 'OPS_LINE_ITEMS'
  self.primary_key = 'opl_stop_id'
end
class DriverHeader < ApplicationRecord
  #belongs_to :dh_paythru
  has_many :ops_stop_rec, foreign_key: 'ops_driver1'
  
  self.table_name = 'DRIVER_HEADER'
  self.primary_key = 'dh_id'
end

您要找的是union operator. There is a gem可以为您处理的。

或者尝试使用两个左外连接并添加一个 OR 条件。