2016-12-07 33 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

相關問題