可以更有效地重写此查询吗?

时间:2013-03-12 13:56:32

标签: 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"
   )
)

这返回了一个哈希值。我用红宝石写了它,但我感觉它可以被优化。

@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)
}

1 个答案:

答案 0 :(得分:2)

假设您有以下关联

OrderSession belongs_to Order
Order has_one OrderSession

你试试

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