Есть таблица, 5000 строк:
id name
Как мне реализовать запрос для нахождение id, name-ы которых идентичны.
P.S. предварительно я не знаю, что искать.
Если можно короткую инструкцию, пжл.
Дано:
id | name
----------
1 | test1
2 | test2
3 | test1
4 | test4
5 | test4
6 | test1
Есть несколько вариантов решения, Вы выберите какой больше нравится:
Первый:
Как и сказали в комментариях - через JOIN таблицы самой в себя:
SELECT DISTINCT
t1.id AS some_id
FROM table t1 JOIN table t2 ON t1.name = t2.name AND t1.id != t2.id
Результат:
some_id
-------
1
4
Note: стоит сказать, что сортированный вывод связан с особенностью работы DISTINCT в PostgreSQL (MySQL под рукой нету), который перед тем как исключить повторения сортирует таблицу.
Без DISTINCT будет:
some_id
-------
1
3
6
4
5
Второй вариант, если нужно отсечь точное количество повторений - подзапрос:
SELECT
table.id AS some_id
FROM
(SELECT
name,
count(id) AS c
FROM
table
GROUP BY name) AS sub_data JOIN table ON table.name = data.name
WHERE
c = 2
Результат:
some_id
-------
4
5
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости