Выбор строк, которые имеют общее значение в одном столбце - PullRequest
0 голосов
/ 06 марта 2020

Моя таблица выглядит следующим образом:

enter image description here

Из этого я вижу, что некоторые поставщики использовали один и тот же IP-адрес (который может быть написан на разных пути). Как мне написать запрос sql, который может дать мне тех поставщиков, которые использовали один и тот же IP-адрес, учитывая, что

84.20.93.11- 84.20.93.11,  84.20.93.11
84.20.93.11- 84.20.93.11
84.20.93.11

являются одинаковыми адресами?

UPD: В результате, Я хочу получить

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

На основании опубликованных вами данных и в соответствии с заявленными требованиями и желаемым результатом в вашем вопросе будет достаточно самостоятельного объединения.

Я не смог найти имя таблицы в вашем вопросе, поэтому я использовал SUPPLIERS как имя таблицы.

select distinct s1.supplier_id
  from suppliers s1
  join suppliers s2
    on s1.ip = s2.ip
   and s1.ctid <> s2.ctid

Обратите внимание, что ctid - это уникальный идентификатор строки в таблице, которую генерирует PostgreSQL. Этот критерий гарантирует, что запрос не будет сравнивать одну и ту же строку в таблице S1 с той же строкой в ​​таблице S2.

0 голосов
/ 06 марта 2020

Вы можете преобразовать этот «список» в массив и использовать его для поиска других строк с такими же IP-адресами.

Что-то в этом роде:

select *
from the_table t1
where exists (select *
              from the_table t2
              where regexp_split_to_array(t1.ip, '\s*[^0-9.]\s*')
                    && regexp_split_to_array(t2.ip, '\s*[^0-9.]\s*')
                and t1.supplier_id <> t2.supplier_id)

Выражение regexp_split_to_array(t1.ip, '\s*[^0-9.]\s*') преобразует «список» IP-адресов в массив и разбивает на все, что не является «IP-адресом». Поэтому regexp_split_to_array('84.20.93.11- 84.20.93.11, 84.20.93.11', '\s*[^0-9-, ]\s*') возвращает следующий массив {84.20.93.11,84.20.93.11,84.20.93.11}

. Затем && проверяет, перекрываются ли массивы двух поставщиков, т. Е. Имеют ли они хотя бы один общий IP-адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...