2012-02-03 41 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