删除符合条件的行? MySQL的

时间:2018-02-16 11:41:34

标签: mysql

我正在考虑在MySQL中进行一些重复数据删除,但我只想保留在特定字段中包含数据的记录。

表格数据如下所示。

CustomerID |名字|姓氏|上次购买日期| +10个其他领域。

我想查找具有相同customerID的记录,并删除没有上次购买日期的记录。我之前尝试选择正确的数据,然后再删除,但没有运气。

SELECT customerID, `Last Purchase Date` 
FROM `table 2` t1
    WHERE
     EXISTS (
        SELECT * FROM `table 2` t2
        WHERE
          t2.customerID = t1.customerID
          AND `Last Purchase Date` = ''
      )
    ORDER BY customerID DESC;

更新:这是数据样本的小提琴。

http://sqlfiddle.com/#!9/4743f/2

2 个答案:

答案 0 :(得分:2)

您想要查找没有Last Purchase Date的记录,因为这些记录是您要删除的记录。所以......

SELECT t1.customerID, t1.`Last Purchase Date` 
FROM `table 2` t1
WHERE
    t1.`Last Purchase Date` = ''
    AND EXISTS (
            SELECT t2.customerID
            FROM `table 2` t2
            WHERE
                t2.customerID = t1.customerID
                AND t2.`Last Purchase Date` <> ''
        )
ORDER BY t1.customerID DESC;

要删除,您只需删除ORDER BY子句,然后将SELECT ... FROM替换为DELETE FROM

答案 1 :(得分:0)

我认为这应该有效。您不提供测试数据,因此我无法轻易检查。但想法是使用你已经在做的事情,并在where子句中添加额外的检查。

SELECT customerID, `Last Purchase Date` 
FROM `table 2` t1
    WHERE
     EXISTS (
        SELECT * FROM `table 2` t2
        WHERE
          t2.customerID = t1.customerID
          AND `Last Purchase Date` = ''
      ) AND t1.`Last Purchase Date` <> ''
    ORDER BY customerID DESC;