2016-12-07 31 views
0

这里有一个表结构:MySQL的删除所有记录,如果,如果一条记录有一定的order_status_id

order_id | order_status_id |  ip  | date_added 
-----------------------------------------------  
1  | 0    | 192.168.1.1 | 2016-12-07 
2  | 0    | 192.168.1.1 | 2016-12-07 
3  | 0    | 192.168.1.1 | 2016-12-07 
4  | 0    | 192.168.1.1 | 2016-12-07 
5  | 1    | 192.168.1.1 | 2016-12-07 

我有删除我的情况下,我们删除与记录最低的ID值行的SQL请求ORDER_ID = 1,2,3

delete n1 FROM `order` n1, `order` n2 
    WHERE n1.order_id > n2.order_id 
    AND n1.order_status_id = '0' 
    AND n2.order_status_id = '0' 
    AND n1.ip = n2.ip 
    AND Day(n1.date_added) = Day(n2.date_added) 

但我想删除与order_status_id = 0(1,2,3,4)的所有记录,如果一条记录(来自同一个IP/DATE_ADDED)具有order_status_id = 1 (在我的情况下,因为我们有order_status_id = 1的记录order_id 5)。

+0

您是否尝试过与MIN搜索(order_status_id)??? –

+0

不,因为我没有想法如何... – tester

回答

0

您可以使用join

delete o 
    from orders o join 
     (select ip, date_added 
      from orders o 
      where order_status_id = 1 
      group by ip, date_added 
     ) oo 
     on o.ip = oo.ip and o.date_added = oo.date_added 
    where o.order_status_id = 0; 
+0

代码擦除记录不是我所期望的,看起来像是被删除记录与order_status_id = 1 – tester

+0

非常感谢你!我们离我们的距离更近)还有一件事:如果你最终帮我解决问题,我将非常感激。这里是一个小提琴与其他ip的15记录:http://sqlfiddle.com/#!9/20c0f我希望sql擦除除记录5,10,15以外的所有如果我们有order_status_id = 1相同的IP /日期订单,工作正常 - 删除全部零。但是如果我们有记录,其中order_status_id = 0,它应该保留最高的order_id ... – tester

+0

@tester。 。 。您的评论听起来像一个不同的问题。应该将新问题作为问题提出,而不是评论。 –

0

其实还是不知道自己真正想做的事,但试试这个:

DELETE n1 FROM `order` n1 
JOIN (
    SELECT 
     MAX(`order_id`) AS `order_id` 
    FROM `order` o1 
    WHERE 
    (NOT EXISTS(SELECT 1 FROM `order` o2 WHERE o1.`ip` = o2.`ip` AND o1.`date_added` = o2.`date_added` AND o2.`order_status_id` = '1') 
    AND o1.`order_status_id` = '0') 
    OR 
    (EXISTS(SELECT 1 FROM `order` o2 WHERE o1.`ip` = o2.`ip` AND o1.`date_added` = o2.`date_added` AND o2.`order_status_id` = '1') 
     AND o1.`order_status_id` = '1') 
    GROUP BY `ip`, `date_added` 
) n2 
ON n1.`order_id` <> n2.`order_id` 

SqlFiddle demo

+0

当我们有5条记录时,它按预期工作,但如果我们有更多的记录,它将删除所有记录,同时删除order_status_id = 1(它不应该)的记录。无论如何非常感谢你!这是一个小提琴与其他ip的10个记录:http://sqlfiddle.com/#!9/a898b – tester

+0

这是一个小提琴与15条记录(来自3个不同的IP /日期):http://sqlfiddle.com/# !9/20c0f我希望sql擦除除记录5,10,15之外的所有记录 – tester

相关问题