Как вывести строки с одинаковыми полями sql

Содержание
  1. Форум пользователей MySQL
  2. #1 20.12.2008 20:13:08
  3. Запрос для выборки одинаковых значений
  4. #2 20.12.2008 23:28:29
  5. Re: Запрос для выборки одинаковых значений
  6. #3 20.12.2008 23:50:07
  7. Re: Запрос для выборки одинаковых значений
  8. #4 21.12.2008 01:23:18
  9. Re: Запрос для выборки одинаковых значений
  10. #5 20.07.2010 18:49:43
  11. Re: Запрос для выборки одинаковых значений
  12. #6 20.07.2010 19:30:21
  13. Re: Запрос для выборки одинаковых значений
  14. #7 20.07.2010 21:24:44
  15. Re: Запрос для выборки одинаковых значений
  16. #8 21.07.2010 13:38:41
  17. Re: Запрос для выборки одинаковых значений
  18. #9 28.07.2010 02:11:35
  19. Re: Запрос для выборки одинаковых значений
  20. #10 28.07.2010 11:17:02
  21. Re: Запрос для выборки одинаковых значений
  22. #11 10.02.2011 18:52:13
  23. Re: Запрос для выборки одинаковых значений
  24. Поиск повторяющихся значений в таблице SQL
  25. ОТВЕТЫ
  26. Ответ 1
  27. Ответ 2
  28. Ответ 3
  29. Ответ 4
  30. Ответ 5
  31. Ответ 6
  32. Ответ 7
  33. Ответ 8
  34. Ответ 9
  35. Ответ 10
  36. Ответ 11
  37. Ответ 12
  38. Ответ 13
  39. Ответ 14
  40. Ответ 15
  41. Ответ 16
  42. Ответ 17
  43. Ответ 18
  44. Ответ 19
  45. Ответ 20
  46. Ответ 21
  47. Ответ 22
  48. Ответ 23
  49. Ответ 24
  50. Ответ 25
  51. Ответ 26
  52. Ответ 27
  53. SQL-запрос на поиск одинаковых значений полей в одной таблице?
  54. Поиск повторяющихся значений в MySQL
  55. 21 ответов

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Страниц: 1

#1 20.12.2008 20:13:08

Запрос для выборки одинаковых значений

Подскажите селект для выборки идентичных (повторяющихся либо похожих) значений в определенном столбике таблицы.

Для примера:
таблица — «table»
столбик — «column»

#2 20.12.2008 23:28:29

Re: Запрос для выборки одинаковых значений

Не понятно, что значит похожих. Для выборки повторяющихся значений без повторов:

#3 20.12.2008 23:50:07

Re: Запрос для выборки одинаковых значений

Пытаюсь выполнить в phpmyadmin тот селект что «Для выборки всех повторяющихся значений (с повторами)» — получаю ошибку:
#1242 — Subquery returns more than 1 row

Читайте также:  Php вывести число элементов массива

Под похожими подразумеваю фразы имеющие одинаковое начало или окончание или «корень»:
Firefox 3.0.5 Final
Firefox 3.0.5 Final Russian
Браузер Firefox 3.0.5

#4 21.12.2008 01:23:18

Re: Запрос для выборки одинаковых значений

Замените LIKE на IN

#5 20.07.2010 18:49:43

Re: Запрос для выборки одинаковых значений

Спасибо за запрос. В свое время он мне здорово помог.

Но сейчас проблема возникла снова:

За это время база существенно подросла и запрос выполняется неимоверно долго. (в таблице около 25к строк). Ждал около часа — надоело.

Пытался оптимизировать производительность mysql сервера, надеялся что запрос будет выполняться быстрей — ничего не вышло.

Подскажите как решить проблему?

#6 20.07.2010 19:30:21

Re: Запрос для выборки одинаковых значений

Хм. А вообще подзапрос нужен?

SELECT `colname` FROM `tablename` GROUP BY 1 HAVING COUNT(*) > 1;

Нужен ключик по (`colname`).

#7 20.07.2010 21:24:44

Re: Запрос для выборки одинаковых значений

Хм. работает! Спасибо!

Только что вы имели ввиду: «Нужен ключик по (`colname`)»?

#8 21.07.2010 13:38:41

Re: Запрос для выборки одинаковых значений

Слово «индекс» Вам больше нравится?

#9 28.07.2010 02:11:35

Re: Запрос для выборки одинаковых значений

возникла необходимость усложнить запрос.

К данному селекту нужно добавить условие:
среди повторяющихся значений выбрать нужно то, где дата в столбце ‘date’ (type=datetime) более поздняя

#10 28.07.2010 11:17:02

Re: Запрос для выборки одинаковых значений

SELECT `colname`, MAX(`date`) FROM `tablename` GROUP BY 1 HAVING COUNT(*) > 1;

#11 10.02.2011 18:52:13

Re: Запрос для выборки одинаковых значений

А как изменить запрос, если мне надо выбрать только те записи,у которых значение столбца COLUM повторяется у всех элементов с индексом (1-10).
Ну например, имеется таблица

CREATE TABLE IF NOT EXISTS `site_autos_params` (
`id` int ( 11 ) NOT NULL auto_increment ,
`auto_id` int ( 11 ) NOT NULL ,
`param_id` int ( 11 ) NOT NULL ,
`variant_id` int ( 11 ) NOT NULL ,
`value` varchar ( 255 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
KEY `auto_id` ( `auto_id` ) ,
KEY `param_id` ( `param_id` )
) ENGINE = MyISAM DEFAULT CHARSET =utf8 AUTO_INCREMENT = 14 ;

INSERT INTO `site_autos_params` ( `id`, `auto_id`, `param_id`, `variant_id`, `value` ) VALUES
( 1 , 6 , 25 , 0 , ‘Белый’ ) ,
( 2 , 5 , 25 , 0 , ‘Бронзовый’ ) ,
( 3 , 4 , 25 , 0 , ‘Белый’ ) ,
( 4 , 3 , 25 , 0 , ‘Белый’ ) ,
( 5 , 1 , 25 , 0 , ‘Белый’ ) ,
( 6 , 6 , 21 , 0 , ‘Бензин’ ) ,
( 7 , 5 , 21 , 0 , ‘Бензин/Газ’ ) ,
( 8 , 3 , 21 , 0 , ‘Бензин’ ) ,
( 9 , 7 , 21 , 0 , ‘Газ’ ) ,
( 10 , 7 , 25 , 0 , ‘Голубой’ ) ;

Мне нужно выбрать те записи у которых auto_id IN (‘4’, ‘5’, ‘6’, ‘7’) и которые имеют одинаковый param_id.
Т.е. нужно выбрать только те параметры, которые встречаются у всех автомобилей!
Пробывал делать так:

Но этот запрос не правильно отрабатывает. Мне именно надо получить те параметры, которые есть у всех авто!

Источник

Поиск повторяющихся значений в таблице SQL

Легко найти duplicates с одним полем:

Поэтому, если у нас есть таблица

Этот запрос даст нам Джона, Сэма, Тома, Тома, потому что все они имеют одинаковый email .

Однако я хочу получить дубликаты с тем же email и name .

То есть, я хочу получить «Том», «Том».

Причина, в которой я нуждаюсь в этом: я допустил ошибку и разрешил вставлять повторяющиеся name и значения email . Теперь мне нужно удалить/изменить дубликаты, поэтому мне нужно сначала их найти.

ОТВЕТЫ

Ответ 1

Просто группируйтесь на обоих столбцах.

Примечание: более старый стандарт ANSI должен иметь все неагрегированные столбцы в GROUP BY, но это изменилось с идеей «функциональной зависимости»:

В теории реляционных баз данных функциональная зависимость представляет собой ограничение между двумя наборами атрибутов в отношении из базы данных. Другими словами, функциональная зависимость — это ограничение, которое описывает взаимосвязь между атрибутами в отношении.

  • Последние PostgreSQL поддерживает его.
  • SQL Server (как на SQL Server 2017) все еще требует наличия всех неагрегированных столбцов в GROUP BY.
  • MySQL непредсказуем, и вам нужно sql_mode=only_full_group_by :
    • GROUP BY lname ORDER BY показывает неправильные результаты;
    • Это наименее затратная совокупная функция при отсутствии ЛЮБОГО() (см. Комментарии в принятом ответе).
  • Oracle недостаточно распространен (предупреждение: юмор, я не знаю об Oracle).

Ответ 2

если вы хотите, чтобы идентификаторы дубликатов использовали это:

для удаления дубликатов попробуйте:

Ответ 3

Ответ 4

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

И чтобы удалить:

Намного легче читать и понимать IMHO

Примечание. Единственная проблема заключается в том, что вы должны выполнить запрос до тех пор, пока не удалите строки, поскольку каждый раз удаляйте только по 1 каждого дубликата

Ответ 5

Ответ 6

Ответ 7

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

Ответ 8

попробуйте этот код

Ответ 9

В случае, если вы работаете с Oracle, этот способ был бы предпочтительнее:

Ответ 10

Это выбирает/удаляет все повторяющиеся записи, кроме одной записи из каждой группы дубликатов. Таким образом, удаление удаляет все уникальные записи + одну запись из каждой группы дубликатов.

Помните о большем количестве записей, это может вызвать проблемы с производительностью.

Ответ 11

Ответ 12

Если вы хотите увидеть, есть ли в вашей таблице повторяющиеся строки, я использовал ниже Query:

Ответ 13

Как мы можем считать дублированные значения? либо он повторяется 2 раза или больше 2. просто считайте их, а не групповыми.

так же просто, как

Ответ 14

Это легкая вещь, которую я придумал. Он использует общее табличное выражение (CTE) и окно раздела (я думаю, что эти функции находятся в SQL 2008 и последующих версиях).

В этом примере найдены все ученики с дублирующимся именем и dob. Поля, которые вы хотите проверить на дублирование, перечислены в предложении OVER. Вы можете включать любые другие поля, которые вы хотите в проекции.

Ответ 15

Ответ 16

SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;

Я думаю, что это будет работать правильно, чтобы искать повторяющиеся значения в определенном столбце.

Ответ 17

Ответ 18

Используя CTE, мы также можем найти повторяющееся значение

Ответ 19

Это также должно работать, возможно, попробуйте.

Особенно хорошо в вашем случае. Если вы ищете дубликаты, у которых есть префикс или общие изменения, например, например. новый домен в почте. то вы можете использовать replace() в этих столбцах

Ответ 20

Если вы хотите найти повторяющиеся данные (по одному или нескольким критериям) и выбрать фактические строки.

Ответ 21

Ответ 22

SELECT column_name,COUNT(*) FROM TABLE_NAME GROUP BY column1, HAVING COUNT(*) > 1;

Ответ 23

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

Ответ 24

Для проверки из дубликата записи в таблице.

Удалить дубликат записи в таблице.

Ответ 25

Мы можем использовать здесь, которые работают с агрегатными функциями, как показано ниже

Здесь в качестве двух полей id_account и data используются Count (*). Таким образом, он выдаст все записи, которые имеют более одного раза одинаковые значения в обоих столбцах.

Мы по какой-то причине ошибочно пропустили добавление каких-либо ограничений в таблицу SQL-сервера, и записи были вставлены дубликаты во все столбцы с интерфейсным приложением. Затем мы можем использовать запрос ниже, чтобы удалить дубликат запроса из таблицы.

Здесь мы взяли все отдельные записи оригинальной таблицы и удалили записи исходной таблицы. Мы снова вставили все различные значения из новой таблицы в исходную таблицу, а затем удалили новую таблицу.

Ответ 26

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

УДАЛИТЬ ИЗ CTE ГДЕ T> 1

Ответ 27

Вы можете использовать ключевое слово SELECT DISTINCT, чтобы избавиться от дубликатов. Вы также можете отфильтровать по имени и получить всех с этим именем на столе.

Источник

SQL-запрос на поиск одинаковых значений полей в одной таблице?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

SQL- запрос. Поиск одинаковых значений полей в таблицах
Добрый день! Есть 3 таблицы: 1.проданные товары, 2.продавец, 3.покупатель: Продавцы.

SQL. Объединение полей в одной таблице
Есть такой скрипт который выводит две таблицы. Наименования с типом String и подсчет с типом Long.

Поиск одинаковых значений полей в бд
Привет. Подскажите решение. Есть таблица А и Б В обеих таблицах разное количество полей, но одно.

Поиск одинаковых значений в таблице
Нужна идея. Имеется таблица. Её редактирование и добавление производится в другом окне(форме) на.

Обратить внимание: ключевые поля должны точно повторяться, по порядку и количеству.
Для примера Train, этим ключем будет одно поле — ‘ФИО’.

По хорошемя, проблему нужно решать в корне — создавая уникальный индекс, — но из-за упомянутых ‘условий возникновения’ это не всегда возможно. А ‘невозможно’, как всегда, проистекает от ошибок проектирования.

SELECT F, I, O FROM Persons WHERE (I, O) IN

перед IN надо взять в скобки

Вот её текст (он оригинально на русском):

Есть возможность выполнить запрос напрямую из базы (в sqlpus или developer)?
Чтобы исключить влияние DELPHY

Добавлено через 7 часов 11 минут
Если я правильно понял, то ваша СУБД не есть oracle
Если это access, то тут такой sql не пойдет, видимо.
Попробуйте так:
SELECT F, I, O FROM Persons WHERE I+O IN
(SELECT I+O FROM Persons
GROUP BY I+O HAVING COUNT(I+O)>1)
но тут еще надо будет, видимо, обработать значения типа null. В oracle можно использовать ф-цию nvl, а как в access — я не знаю.

Источник

Поиск повторяющихся значений в MySQL

У меня есть таблица со столбцом типа varchar, и я хотел бы найти все записи, которые имеют одинаковые значения в этом столбце. Какой лучший запрос я могу использовать для поиска дубликатов?

21 ответов

сделать SELECT С GROUP BY предложения. Скажем имя это столбец, в котором вы хотите найти дубликаты:

это вернет результат с имя значение в первом столбце, и сколько раз это значение отображается во втором.

этот запрос возвращает все записи, а не только отдельных varchar_column ‘ s.

этот запрос не использует COUNT(*) . Если есть много дубликатов, COUNT(*) дорого, и вам не нужно все COUNT(*) , вам просто нужно знать, если есть две строки с одинаковым значением.

имея индекс на varchar_column , конечно, значительно ускорит этот запрос.

построение ответа Левика, чтобы получить идентификаторы повторяющихся строк, которые вы можете сделать GROUP_CONCAT если ваш сервер поддерживает его (это вернет список идентификаторов, разделенных запятыми).

предполагая, что ваша таблица называется TableABC, а столбец, который вы хотите, — Col, а первичный ключ к T1-ключ.

преимущество этого подхода над приведенным выше ответом заключается в том, что он дает ключ.

чтобы узнать, сколько записей дублируется в столбце имя в Employee, следующий запрос полезен;

заменить города С вашего стола. Заменить имя С вашим именем Поля

мой последний запрос включил несколько ответов здесь, которые помогли-объединение group by, count & GROUP_CONCAT.

Это предоставляет идентификатор обоих примеров (разделенных запятыми), штрих-код, который мне нужен, и сколько дубликатов.

изменить таблицу и столбцы соответственно.

Я видел вышеуказанный результат, и запрос будет работать нормально, если вам нужно проверить значение одного столбца, которое дублируется. Например, электронная почта.

но если вам нужно проверить больше столбцов и хотите проверить комбинацию результата, чтобы этот запрос работал нормально:

ниже приведены все product_id, которые используются более одного раза. Вы получите только одну запись для каждого product_id.

С @maxyfc это ответ далее мне нужно было найти все строк, которые были возвращены с повторяющимися значениями, поэтому я мог редактировать их в MySQL Workbench:

Я не вижу никаких присоединений, whitch имеет много применений с точки зрения дубликатов.

Это aproeach дает вам фактические удвоенные результаты.

для удаления повторяющихся строк с несколькими полями сначала отмените их на новый уникальный ключ, который указан только для отдельных строк, затем используйте команду «group by» для удаления повторяющихся строк с тем же новым уникальным ключом:

один очень поздний вклад. в случае, если это поможет кому-нибудь waaaaaay вниз по линии. У меня была задача найти совпадающие пары транзакций (фактически обе стороны переводов со счета на счет) в банковском приложении, чтобы определить, какие из них были » от » и » до » для каждой транзакции между счетами, поэтому мы закончили с этим:

в результате DuplicateResultsTable предоставляет строки, содержащие совпадающие (т. е. повторяющиеся) транзакции, но также предоставляет ту же транзакцию id в обратном порядке во второй раз он соответствует той же паре, поэтому внешний SELECT можно ли группировать по первому идентификатору транзакции, что делается с помощью LEAST и GREATEST чтобы убедиться, что два transactionid всегда находятся в одном порядке в результатах, что делает его безопасным для GROUP первым, тем самым устраняя все дубликаты совпадений. Пробежал почти миллион записей и идентифицировал 12,000+ матчей всего за 2 секунды. Конечно, transactionid является основным индексом, который действительно помогать.

Источник

Оцените статью