Удалить строки, где выполняется условие? MySQL

0

Я смотрю на некоторые дедупликации в 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;

Обновление: вот сценарий с образцом данных.

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

Теги:

2 ответа

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
    Это кажется хорошим! Я также добавил AND t1.customerID! = '' После первого WHERE для даты последней покупки, так как я также хотел убедиться, что поля CustomerID не заполнены, если они не включены в поиск. Кажется, это сработало!
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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню