Удаление дубликатов данных mysql - PullRequest
0 голосов
/ 02 октября 2018

У нас есть дубликат идентификатора, где, если мы используем

SELECT MAX(id), COUNT(id) AS count 
FROM user_status 
GROUP BY user_id, user_type 
HAVING COUNT(*) > 1

, мы получаем дубликаты данных

Теперь, когда я пытался вставить их в удаление с помощью

DELETE 
FROM user_status 
WHERE id IN (SELECT MAX(id), COUNT(id) AS count 
             FROM user_status 
             GROUP BY user_id, user_type 
             HAVING COUNT(*) > 1
            )

Я получил следующую ошибку

Operand should contain 1 column

Как я могу это исправить?TIA

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Как насчет

DELETE user_status
FROM user_status LEFT JOIN (
    SELECT MAX(user_id) maxId
    FROM user_status
    GROUP BY user_type
) a ON maxId = user_id
WHERE maxId IS NULL;

В вашем коде where col1 in (select col1, col2) количество столбцов просто не совпадает.Если вы ссылаетесь на каждый выбранный столбец, он работает в принципе:

DELETE FROM user_status
WHERE (user_id, user_type) NOT IN (
    SELECT MAX(user_id) maxId, user_type
    FROM (select * from user_status) a
GROUP BY user_type);
0 голосов
/ 02 октября 2018

Поскольку сообщение ясно, что вы выбираете два столбца в subquery, что недопустимо в предложении IN, но все же mysql показывает некоторую ошибку в таком запросе, поэтому замените запрос на объединение, как показано ниже

DELETE us 
FROM user_status us
INNER JOIN (SELECT MAX(id) id 
            FROM user_status 
            GROUP BY user_id, user_type HAVING COUNT(*) > 1) t ON t.id = us.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...