Как выбрать записи с дублирующими полями из выборки записи по определенному условию в Postgresql
Существует таблица с миллиноами записей.
например, такая выборка
select c.id, c.mobile_phone, c.last_name, c.email
from user c
group by c.id, c.mobile_phone, c.last_name, c.email
HAVING count(*) > 1;
занимает минуты.
Необходимо выбрасть записи с одинаковым mobile_phone, а из получившейся выборки выбрать записи - у которых одинаковый Email.
пробовал так
вот так получаю одинаковые записи по указанному номеру тел.
select * from (select * from user where mobile_phone = '78987787878') ou
where (select count(*) from user inr
where inr.email = ou.email) > 1;
и так
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY email, mobile_phone
ORDER BY email, mobile_phone) AS Row_Number
FROM (select * from user where mobile_phone = '000023323232') as "c*";
но он не показывает дубликаты с email
У 5 пользователей - один и тот же номер телефона. Из этих 5 пользователей - 2 имееют одинаковый Email - они то и должны попасть в выборку.
select * from (select * from employee where
mobile_phone = '23434302722') ou
where (select count(*) from employee inr
where inr.email = ou.email) > 1;
Это работает не на всех версиях postgresql.
PostgreSQL 14.7 - работает.
PostgreSQL 13.7 - не работает.
Есть ли идеи как это сделать ?
Источник: Stack Overflow на русском