Как я могу удалить записи, которые находит мой запрос MySQL? - PullRequest
0 голосов
/ 21 ноября 2018
SELECT u.name, u.age, u.sex
FROM User u
INNER JOIN (
SELECT age, sex, COUNT(*)
FROM User
GROUP BY age, sex
HAVING COUNT(*) > 1) temp
ON temp.age = u.age
AND temp.sex = u.sex
ORDER BY age, sex

этот запрос находит все мои дубликаты в моей базе данных, но как я могу удалить несколько?

1 Ответ

0 голосов
/ 21 ноября 2018

Выберите ID строки, которую вы выбираете только, затем поставьте DELETE, которая удалит все строки с этими выбранными ID.

DELETE FROM User u
WHERE u.ID IN
(
    SELECT u.ID
    FROM User u
    INNER JOIN
    (
        SELECT u.ID
        FROM User
        GROUP BY age, sex
        HAVING COUNT(*) > 1
    ) temp
    ON temp.age = u.age
    AND temp.sex = u.sex
    ORDER BY age, sex
)

Но я должен сообщить вам, что выследует изменить ваш запрос, так как он будет стирать все.Ваш оператор выбора такой же, как и SELECT * FROM User, как и все, если внутреннее соединение.Я думаю, что вы действительно хотите:

DELETE FROM User u
WHERE u.ID IN
(
    SELECT u.ID
    FROM User
    GROUP BY age, sex
    HAVING COUNT(*) > 1
)
...