Я смотрю на некоторые дедупликации в MySQL, но я хочу только сохранить запись, которая имеет данные в определенной области.
Данные таблицы выглядят следующим образом.
CustomerID | Имя: Фамилия | Последняя покупка | + 10 других полей.
Я хочу найти записи, имеющие один и тот же идентификатор клиента, и удалить те, у которых нет последней даты покупки. Сначала я попытался выбрать правильные данные перед удалением, но не повезло.
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;
Обновление: вот сценарий с образцом данных.
Вы хотите найти записи, у которых нет 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
.
Я думаю, что это должно сработать. Вы не предоставляете тестовые данные, поэтому я не могу их легко проверить. Но идея состоит в том, чтобы использовать то, что вы уже делаете, и добавить дополнительную проверку в предложение 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;