У меня есть таблица контактов. Таблица содержит столбец mobile_phone, а также столбец home_phone. Я хотел бы получить все пары повторяющихся контактов, где пара - это два контакта с общим номером телефона.
Обратите внимание: если mobile_phone контакта A совпадает с home_phone контакта B, это также дубликат. Вот пример трех контактов, которые должны совпадать.
contact_id|mobile_phone|home_phone|other columns such as email.......|...
-------------------------------------------------------------------------
111 |9748777777 |1112312312|..................................|...
112 |1112312312 |null |..................................|...
113 |9748777777 |0001112222|..................................|...
В частности, я хотел бы вернуть таблицу, в которой каждая строка содержит contact_ids двух совпадающих контактов. Например,
||contact_id_a|contact_id_b||
||-------------------------||
|| 145155 | 145999 ||
|| 145158 | 145141 ||
С помощью @Erwin здесь введите здесь описание ссылки Мне удалось написать запрос, близкий к тому, что я пытаюсь достичь, возвращает список contact_ids всех контактов в списке, которые имеют общий номер телефона с другими контактами в списке.
SELECT c.contact_id
FROM contacts c
WHERE EXISTS (
SELECT FROM contacts x
WHERE (x.data->>'mobile_phone' is not null and x.data->>'mobile_phone' IN (c.data->>'mobile_phone', c.data->>'home_phone'))
OR (x.data->>'home_phone' is not null and x.data->>'home_phone' IN (c.data->>'mobile_phone', c.data->>'home_phone'))
AND x.contact_id <> c.contact_id -- except self
);
Вывод содержит только такие contact_ids ...
||contact_id||
--------------
|| 2341514 ||
|| 345141 ||
Я бы хотел чтобы вернуть contact_ids совпадающих контактов в одну строку, как показано выше.