2013-03-12 31 views
-3

我有一個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) 
} 
+0

@CoderSeven你知道OP不處理原始SQL和相當活躍的記錄? – andy 2013-03-12 14:00:44

+1

@CoderSeven那麼你沒有處理SQL,所以連接是無關緊要的。 Rails自動加入。 'Post.find(1).users'用'post_id = 1'查找所有用戶。 – andy 2013-03-12 14:05:08

+0

啊,你知道的越多!謝謝。我熟悉ORM,而不是ActiveRecord。 – mawburn 2013-03-12 14:06:28

回答

2

假設你有以下的關聯

OrderSession belongs_to Order 
Order has_one OrderSession 

您嘗試

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

您忘記使用佔位符「?」:'@orders = Order.joins(:order_session).where('order_sessions.order_status!=?',paid_order_status_id)' – trushkevich 2013-03-12 15:56:17

+0

謝謝!只是添加了:) – 2013-03-13 00:21:51

相關問題