Дубликаты с одним полем легко найти:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Так что если у нас есть стол
ID NAME EMAIL
1 John asd@asd.com
2 Sam asd@asd.com
3 Tom asd@asd.com
4 Bob bob@asd.com
5 Tom asd@asd.com
Этот запрос даст нам Джон, Сэм, Том, Том, потому что они все одинаковы email
.
Тем не менее, я хочу получить дубликаты с тем же email
и name
.
То есть я хочу получить «Том», «Том».
Причина, по которой мне это нужно: я допустил ошибку и позволил вставить дубликаты name
и email
значения. Теперь мне нужно удалить / изменить дубликаты, поэтому мне нужно сначала найти их.
sql
duplicates
Alex
источник
источник
name
поля в SELECT.Ответы:
Просто сгруппируйте по обоим столбцам.
Примечание: более старый стандарт ANSI должен иметь все неагрегированные столбцы в GROUP BY, но это изменилось с идеей «функциональной зависимости» :
Поддержка не соответствует:
sql_mode=only_full_group_by
:источник
>1
=1
попробуй это:
ВЫВОД:
если вы хотите идентификаторы дупс, используйте это:
ВЫВОД:
чтобы удалить дубликаты, попробуйте:
ВЫВОД:
источник
Попробуй это:
источник
Если вы хотите удалить дубликаты, вот гораздо более простой способ сделать это, чем найти четные / нечетные строки в тройном суб-выборе:
И так, чтобы удалить:
Гораздо проще читать и понимать ИМХО
Примечание . Единственная проблема заключается в том, что вы должны выполнить запрос, пока не будет удалено ни одной строки, поскольку каждый раз удаляется только 1 из каждого дубликата.
источник
You can't specify target table 'users' for update in FROM clause
Попробуйте следующее:
источник
источник
Немного опоздал на вечеринку, но я нашел действительно крутой обходной путь, чтобы найти все дубликаты ID:
источник
GROUP_CONCAT
это остановится после некоторой заданной длины, поэтому вы можете не получить всеid
s.попробуй этот код
источник
Это выбирает / удаляет все дублирующиеся записи, кроме одной записи из каждой группы дубликатов. Таким образом, удаление оставляет все уникальные записи + одну запись из каждой группы дубликатов.
Выберите дубликаты:
Удалить дубликаты:
Помните о большом количестве записей, это может вызвать проблемы с производительностью.
источник
Если вы работаете с Oracle, этот способ будет предпочтительнее:
источник
источник
Если вы хотите увидеть, есть ли в вашей таблице повторяющиеся строки, я использовал ниже Query:
источник
Это легкая вещь, которую я придумал. Он использует общее табличное выражение (CTE) и окно раздела (я думаю, что эти функции есть в SQL 2008 и более поздних версиях).
Этот пример находит всех студентов с одинаковыми именами и документами. Поля, которые вы хотите проверить на дублирование, идут в предложении OVER. Вы можете включить любые другие поля, которые вы хотите в проекции.
источник
источник
Как мы можем посчитать дублированные значения ?? или это повторяется 2 раза или больше 2. просто посчитайте их, а не по группам.
так просто как
источник
Используя CTE, мы также можем найти двойное значение
источник
источник
SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;
Я думаю, что это будет работать правильно для поиска повторяющихся значений в определенном столбце.
источник
источник
Это также должно работать, может быть, попробовать.
Особенно хорошо в вашем случае, если вы ищете дубликаты, у которых есть какой-то префикс или общие изменения, например, новый домен в почте. тогда вы можете использовать replace () в этих столбцах
источник
Если вы хотите найти дубликаты данных (по одному или нескольким критериям) и выбрать фактические строки.
http://developer.azurewebsites.net/2014/09/better-sql-group-by-find-duplicate-data/
источник
источник
COUNT
безGROUP BY
, если это не относится ко всей таблице.Удалить записи, имена которых повторяются
источник
Для проверки из дубликата записи в таблице.
или
Удалить дубликат записи в таблице.
или
источник
SELECT column_name,COUNT(*) FROM TABLE_NAME GROUP BY column1, HAVING COUNT(*) > 1;
источник
Мы можем использовать здесь, которые работают с агрегатными функциями, как показано ниже
Здесь в качестве двух полей id_account и data используются Count (*). Таким образом, он выдаст все записи, которые имеют более одного раза одинаковые значения в обоих столбцах.
Мы по какой-то причине ошибочно пропустили добавление каких-либо ограничений в таблицу SQL-сервера, и записи были вставлены дубликаты во все столбцы с интерфейсным приложением. Затем мы можем использовать запрос ниже, чтобы удалить дубликат запроса из таблицы.
Здесь мы взяли все отличные записи исходной таблицы и удалили записи исходной таблицы. Мы снова вставили все различные значения из новой таблицы в исходную таблицу, а затем удалили новую таблицу.
источник
Вы можете попробовать это
источник
Самое главное здесь - иметь самую быструю функцию. Также должны быть идентифицированы индексы дубликатов. Самостоятельное объединение является хорошим вариантом, но для более быстрой функции лучше сначала найти строки, которые имеют дубликаты, а затем объединить с исходной таблицей для поиска идентификатора дублированных строк. Наконец, порядок по любому столбцу, кроме ID, чтобы дублированные строки были рядом друг с другом.
источник
Вы можете использовать ключевое слово SELECT DISTINCT, чтобы избавиться от дубликатов. Вы также можете фильтровать по имени и получить всех с этим именем на столе.
источник
Точный код будет отличаться в зависимости от того, хотите ли вы также найти дублирующиеся строки или только разные идентификаторы с одинаковыми адресом электронной почты и именем. Если id является первичным ключом или иным образом имеет уникальное ограничение, это различие не существует, но вопрос не определяет это. В первом случае вы можете использовать код, приведенный в нескольких других ответах:
В последнем случае вы бы использовали:
источник