2012-02-03 39 views
0

我對SQL很感興趣,我必須將這個ruby腳本轉換爲SQL,因爲ruby腳本太長而無法在服務器上運行。下面是Ruby腳本:高級SQL查詢幫助。需要將ruby腳本翻譯爲SQL查詢

orders = Order.find_all_by_state("in_progress"); nil 
orders.each do |o| 
    if o.line_items.length == 0 and o.created_at > Time.parse("2011-12-14 00:00:00.000000 -08:00") and o.created_at < Time.parse("2011-12-21 00:00:00.000000 -08:00") 
    o.adjustments[0].destroy 
    o.shipment.destroy 
    o.turnaround_time.destroy 
    o.checkout.destroy 
    o.destroy 
    end; nil 
end; nil 

反正協會如下:

的訂單有一個結賬,運輸,週轉時間,許多line_items,和許多調整(訂單我只想刪除有1)。 我想要刪除所有沒有訂單項且在日期範圍內創建的訂單(十二月十五日至十二月)。我還想刪除與這些訂單相關的所有對象(貨件,週轉時間,結賬,調整)。我是新來的SQL,我絕對不知道如何做到這一點。我一直在看SQL文檔,但我真的很爲這個語法掙扎。如果我能得到一些幫助,那會很好。

回答

0

要刪除的訂單沒有任何行項目:

delete from order 
where order_id not in (select order_id from line_item); 

要刪除(現在)沒有一個訂單相關對象:

delete from shipment 
where order_id not in (select order_id from order); 
+0

感謝。結束了遵循您的指導原則,我用這個代碼:'DELETE FROM orders WHERE id not in(SELECT order_id FROM line_items)AND created_at> =「2011-12-14 00:00:00.000000 -08:00」AND created_at <= 「2011-12-21 00:00:00.000000 -08:00」; DELETE FROM shipments WHERE order_id NOT IN(SELECT id FROM orders); DELETE FROM checkouts WHERE order_id NOT IN(SELECT id FROM orders); DELETE FROM調整 WHERE order_id NOT IN(SELECT id FROM orders); DELETE FROM turnaround_times WHERE order_id NOT IN(SELECT id FROM orders);' – Zyren 2012-02-03 16:39:33