Таблица с пятью соответствующими полями;Как удалить лишние строки в таблице MySQL?
ID (Autoincrement,unique, etc)
ID_customer - ties in each row to another table with customers, not unique, not NULL
value1 - can be 0 and NULL (NULL is not 0)
value2 - can be 0 and NULL (NULL is not 0)
type - can be 1 or 0
Я хочу, чтобы пройти через стол и найти каждый случай, когда клиент имеет более чем одну строку, и если существует несколько строк с одинаковым значением по типу, удалять любые такие строки, которые имеют только 0s в их стоимости колонны. Например;
1 1 40 8 1
2 1 0 0 1 <--
3 1 30 5 0
4 1 45 8 0
В этом случае команде необходимо удалить указанную строку, но оставить ее неповрежденными. Не слишком сложно. Нечто подобное, вероятно, работать (повторить для типа = 0):
DELETE FROM table
WHERE value1 = 0 AND value2 = 0 AND type = 1
AND ID_customer IN
(SELECT ID_customer
FROM table
WHERE type = 1 GROUP BY ID_customer HAVING count(*) > 1)
Проблема в том, подобные случаи могли бы существовать:
5 2 0 0 1
6 2 0 0 1 <--
7 2 0 0 0
8 2 0 0 0 <--
В этом случае я хотел бы, чтобы удалить два из строк, но не все строки. Есть ли способ удалить дубликаты строк, но только если столбцы значений равны 0s? Будет ли эта работа (опять же, повторяется для type = 0), или я что-то упускаю?
DELETE
FROM TABLE
WHERE value1 = 0 AND value2 = 0 AND TYPE = 1
AND ID NOT IN
(SELECT ID
FROM TABLE
WHERE value1 = 0 AND value2 = 0 AND TYPE = 1
GROUP BY ID_customer)
редактировать: Я посмотрел на другие вопросы удаления дубликатов, но я не могу найти тот, который определяет подзапросы в порядке мой стол требует (в том, где я хочу, чтобы сохранить некоторые из дублей).
Может ли быть более одного дубликата для каждого пользователя и ввести его? – Shadow
Да, если столбцы значений отличны от нуля. – Pontus
@JanZeiseweis Опять же, тема, которую вы отметили как дубликаты, отвечает только на вторую часть, а не на первую часть. Запрос на удаление в вопросе даст синтаксическую ошибку (не может выбрать из той же таблицы, которая изменяется) – Shadow