- Форум пользователей MySQL
- #1 20.12.2008 20:13:08
- Запрос для выборки одинаковых значений
- #2 20.12.2008 23:28:29
- Re: Запрос для выборки одинаковых значений
- #3 20.12.2008 23:50:07
- Re: Запрос для выборки одинаковых значений
- #4 21.12.2008 01:23:18
- Re: Запрос для выборки одинаковых значений
- #5 20.07.2010 18:49:43
- Re: Запрос для выборки одинаковых значений
- #6 20.07.2010 19:30:21
- Re: Запрос для выборки одинаковых значений
- #7 20.07.2010 21:24:44
- Re: Запрос для выборки одинаковых значений
- #8 21.07.2010 13:38:41
- Re: Запрос для выборки одинаковых значений
- #9 28.07.2010 02:11:35
- Re: Запрос для выборки одинаковых значений
- #10 28.07.2010 11:17:02
- Re: Запрос для выборки одинаковых значений
- #11 10.02.2011 18:52:13
- Re: Запрос для выборки одинаковых значений
- Поиск повторяющихся значений в таблице SQL
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
- Ответ 19
- Ответ 20
- Ответ 21
- Ответ 22
- Ответ 23
- Ответ 24
- Ответ 25
- Ответ 26
- Ответ 27
- SQL-запрос на поиск одинаковых значений полей в одной таблице?
- Поиск повторяющихся значений в MySQL
- 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
Под похожими подразумеваю фразы имеющие одинаковое начало или окончание или «корень»:
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 является основным индексом, который действительно помогать.
Источник