MySQL просматривает повторяющиеся записи в таблице базы данных и удаляет их
MySQL просматривает повторяющиеся записи в таблице базы данных и удаляет их

Данные таблицы следующие

Просмотр записей с тем же именем пользователя

Язык кода:javascript
копировать
select * from user where username in (select username from user group by username HAVING count(*) >1);

Просмотр повторяющихся записей с одинаковым именем пользователя и номером телефона

Язык кода:javascript
копировать
select * from user where (username,phone)
in (select username,phone from user group by username,phone HAVING count(*) >1);

Уведомление:whereВ условиях(username,телефон) нельзя опустить, иначе будет сообщено об ошибке.

Удалить повторяющиеся записи с одинаковым именем пользователя и номером телефона.

Язык кода:javascript
копировать
DELETE from user where (username,phone) -- Уведомление: Здесь необходимо добавить круглые скобки и рассматривать их как совместное поле.
		IN (
        -- Найдите информацию о пользователе с повторяющимися именами пользователей и номерами мобильных телефонов.
        SELECT username,phone FROM user GROUP BY username,phone HAVING COUNT(1) > 1
    ) AND id NOT IN (
        -- Запросить запись с наименьшим идентификатором
        SELECT MIN(id) FROM user GROUP BY username,phone HAVING COUNT(1) > 1
		);

Кажется, что приведенный выше оператор должен выполняться нормально. Он удалит повторяющиеся записи с одинаковым именем пользователя и номером мобильного телефона и сохранит только запись с наименьшим идентификатором. Фактическое выполнение сообщит о следующей ошибке:

1093 - Вы не можете указать целевую таблицу «пользователь» для обновления в предложении FROM. Значение: данные, запрошенные в той же таблице, не могут использоваться в качестве обновленных данных в той же таблице.

Правильный способ написания такой:

Язык кода:javascript
копировать
DELETE from user where id in(
	select * from (
		select id from user where (username,phone) -- Уведомление: Здесь необходимо добавить круглые скобки и рассматривать их как совместное поле. 
		IN (
				-- Найдите информацию о пользователе с повторяющимися именами пользователей и номерами мобильных телефонов.
				SELECT username,phone FROM user GROUP BY username,phone HAVING COUNT(1) > 1
		) AND id NOT IN (
				-- Запросить запись с наименьшим идентификатором
				SELECT MIN(id) FROM user GROUP BY username,phone HAVING COUNT(1) > 1
		) 
	)as u

);

Выберите результат через промежуточную таблицу еще раз, избежав таким образом ошибок.

Соответствующие данные инициализации

Язык кода:javascript
копировать
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT 'имя пользователя',
  `phone` varchar(20) DEFAULT NULL COMMENT «Зарегистрировать номер мобильного телефона»,
  `age` int(11) DEFAULT NULL COMMENT 'возраст',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='Таблица пользователей';


INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (1, 'Я zjq основной базы данных', '13666666666', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (2, 'zjq', '15656455662', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (3, 'zjq666', '15656455663', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (4, 'zjq', '15656455664', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (5, 'zjq666', '15656455662', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (6, 'zjq', '15656455666', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (7, 'zjq888', '15656455667', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (8, 'zjq', '15656455668', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (9, 'zjq323', '15658855662', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (10, 'zjq', '15656455662', 18);
INSERT INTO `user`(`id`, `username`, `phone`, `age`) VALUES (11, 'zjq', '16666666662', 99);

Woo la la la la Если вам понравилось, поставьте лайк, сохраните или подпишитесь.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода