Укажите для объекта, есть ли принадлежащий ему объект, который также принадлежит другим

#sql #postgresql

#sql #postgresql

Вопрос:

Дана таблица соединений, показывающая, какие страны ( c ) посетили какие лица ( p ):

  --- --- 
| c | p |
 --- --- 
| 1 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 4 |
 --- --- 
  

Я ищу запрос, который сообщает для данной страны, посещал ли ее кто-то, кто тоже посетил другую страну. Итак, в этом примере этот запрос должен возвращать true для стран 1 и 3.

Ответ №1:

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

 select string_agg(c::text,',')
from foo
group by p
having count(distinct c) > 1
  

DBFiddle : https://dbfiddle.uk/?rdbms=postgres_11amp;fiddle=8b81477bbf205f3792756e53bf03e22a

Ответ №2:

Попробуйте этот код :

 SELECT c 
FROM tbl
WHERE p IN (SELECT p 
            FROM tbl 
            GROUP BY p 
            HAVING COUNT(DISTINCT c) > 1)