Выявление повторяющихся кратных электронных писем для пользователя - PullRequest
0 голосов
/ 19 июня 2020

У меня есть модели User и UserEmails.

Пользовательские столбцы: id, first_name, last_name UserEmails: id, user_id, email, primary

Мне нужна такая функция (https://imgur.com/a/762iK9r)

Суть такова: дублирующиеся пользователи идентифицируются по электронной почте.

Пример: Пользователь 1:

{ id: 1, first_name: 'Test', last_name: 'User1' }

UserEmails для пользователя 1:

{ email: 'same_email3@test.com', primary: true, user_id: 1 }

Пользователь 2:

{ id: 2, first_name: 'Test', last_name: 'User2' }

Электронная почта пользователя для пользователя 2:

{ { email: 'same_email@test.com', primary: true, user_id: 2 }, { email: 'same_email1@test.com', primary: false, user_id: 2 }, { email: 'same_email3@test.com', primary: false, user_id: 2 } }

Пользователь 3:

{ id: 3, first_name: 'Test', last_name: 'User3' }

Электронная почта пользователя для пользователя 3:

{ { email: 'same_email@test.com', primary: true, user_id: 3 }, { email: 'same_email3@test.com', primary: false, user_id: 3 }, { email: 'same_email4@test.com', primary: false, user_id: 3 } }

Мне нужен запрос, который найдет дубликаты и вернет такой массив идентификаторов: [[1, 2, 3], [...]]

У меня есть запрос, но он неправильно отображает массив идентификаторов:

ids = User.left_outer_joins(:user_emails)
          .select('array_agg(users.id) AS ids')
          .where('user_emails.email IS NOT NULL')             
          .group("user_emails.email")
          .having('COUNT(1) > 1')
          .map(&:ids)

Я получаю этот массив, но массив [2, 3] уже находится в массиве [1,2,3].

[[1, 2, 3], [2, 3]]

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

1 Ответ

0 голосов
/ 20 июня 2020

Вы можете попробовать самостоятельно присоединиться, чтобы найти дубликаты

select distinct(u1.user_id) from public.UserEmails u1, public.UserEmails u2
where u1.email = u2.email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...