Sql 能否更有效地重写此查询?

Sql 能否更有效地重写此查询?,sql,ruby-on-rails,ruby,activerecord,Sql,Ruby On Rails,Ruby,Activerecord,我有这样一个SQL查询: select * from orders where order_session_id IN ( select id order_status from order_sessions where order_status IN ( select id from order_status_types where order_status != "Paid" ) ) 这返回了一个散列。我用ruby写

我有这样一个SQL查询:

select * 
from orders 
where order_session_id IN ( 
   select id order_status 
   from order_sessions 
   where order_status IN (
      select id 
      from order_status_types 
      where order_status != "Paid"
   )
)
这返回了一个散列。我用ruby写的,但我觉得它可以优化

@orders = []
paid_order_status_id = OrderStatusType.find_by_order_status("Paid").id
OrderSession.where('order_status != ?',paid_order_status_id).each { |unpaid_order|
  @orders << Order.find(unpaid_order.id)
}
@orders=[]
已付款订单状态id=订单状态类型。按订单状态(“已付款”)查找。id
OrderSession.where('order_status!=?',paid_order_status_id.)。每个{124;未付_订单|

@订单假设您有以下关联

OrderSession belongs_to Order
Order has_one OrderSession
你试试看

@orders = Order.joins(:order_session).where('order_sessions.order_status != ?', paid_order_status_id)

@CoderSeven你知道OP不是在处理原始SQL,而是在处理活动记录吗?@CoderSeven你不是在处理SQL,所以连接是不相关的。Rails会自动进行连接。
Post.find(1).users
查找所有具有
post\u id=1
的用户,您知道的越多!谢谢。我熟悉的是ORMs,而不是ActiveRecord。您能提供订单、订单会话和订单状态类型的模型关联吗?您忘了使用占位符“?:
@orders=order.joins(:订单会话)。在哪里('order\u sessions.order\u status!=?',paid\u order\u status\u id)
谢谢!刚刚添加了它:)