我正在考虑在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;
更新:这是数据样本的小提琴。
答案 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;