Нужен запрос без подзапроса - MySQL
Формулировка задачи:
Использую вот такой запрос чтобы узнать 'id' все повторяющихся значений в столбце 'ru'
SELECT `id` , `ru` FROM `table` WHERE `ru` IN (SELECT `ru` FROM `table` GROUP BY `ru` HAVING count(*)>1);
При количестве записей 1000 штук, запрос занимает 16 сек, но записей будет намного больше.
Подскажите есть ли более быстрый способ получить id все повторяющизся значений средствами MySql?
Например
------------------
¦ id ¦ ru ¦
------------------
¦ 1 ¦ Вася ¦
------------------
¦ 2 ¦ Вася ¦
------------------
¦ 3 ¦ Миша ¦
------------------
¦ 4 ¦ Олег ¦
------------------
¦ 5 ¦ Олег ¦
------------------
Нужно получить
1 Вася
2 Вася
4 Олег
5 Олег
Решение задачи: «Нужен запрос без подзапроса»
textual
Листинг программы
SELECT GROUP_CONCAT(id) AS ids , ru, COUNT(*) AS cnt FROM `table1` GROUP BY ru HAVING cnt > 1
Объяснение кода листинга программы
SELECT
- оператор выбора данных из базы данных.GROUP_CONCAT(id)
- функция агрегирования, которая объединяет значения столбцаid
в одну строку, разделенную запятыми.AS
- оператор присвоения псевдонима для вычисляемого столбца.ids
- псевдоним для вычисляемого столбца, содержащего объединенные значенияid
.ru
- название столбца, содержащего данные, которые будут группироваться.COUNT(*)
- функция агрегирования, которая подсчитывает количество строк в каждой группе.cnt
- псевдоним для вычисляемого столбца, содержащего количество строк в каждой группе.FROM
- оператор указания источника данных.table1
- название таблицы, из которой берутся данные.GROUP BY
- оператор группировки строк по указанному столбцу.ru
- название столбца, по которому происходит группировка.HAVING
- оператор фильтрации результатов агрегирования.cnt > 1
- условие, которое оставляет только те группы, в которых количество строк больше одного.ORDER BY
- оператор сортировки результатов запроса.ru
- название столбца, по которому происходит сортировка.DESC
- направление сортировки - по убыванию.LIMIT
- оператор ограничения количества возвращаемых строк.20
- максимальное количество строк, которые будут возвращены.OFFSET
- оператор пропуска первых указанных строк.0
- количество строк, которые будут пропущены.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д